۱۰ ویژگی جدید اکمااسکریپت ۲۰۲۰

یکی از مهم‌ترین ویژگی‌های جاوااسکریپت که آن را نسبت به دیگر تکنولوژی‌ها محبوب‌تر کرده، به وجود آمدن تغییر و تحول و به‌روزرسانی‌های مداوم در این زبان برنامه نویسی است.بعد از سال ۲۰۱۵ که بزرگ‌ترین به‌روزرسانی در جاوااسکریپت به نام ES6 اتفاق افتاد، انتشار نسخه‌های جدید از این زبان روندی سالانه پیدا کرد که این‌گونه برنامه‌نویس‌ها می‌توانستند خود را راحت‌تر با تغییرات همراه کنند.در این مقاله ۱۰ ویژگی جدید نسخه‌ی اکمااسکریپت ۲۰۲۰ که به تازگی منتشر شده را با هم بررسی می‌کنیم.۱. قابلیت BigIntتا پیش از این بزرگ‌ترین عددی که در حافظه‌ی جاوااسکریپت به عنوان یک Integer ذخیره می‌شد مقداری معادل «۱-۲⁵³» یا «۹,۰۰۷,۱۹۹,۲۵۴,۷۴۰,۹۹۱ -/+» بود که اکنون با اضافه شدن ویژگی کاربردی «BigInt» می‌توانید حتی بیش‌تر از این مقدار را نیز مورد استفاده قرار دهید.این ویژگی به شما این امکان را می‌دهد که اعداد بسیار بزرگتری را به منظور پردازش اطلاعات و داده‌ها یا برای اهداف دیگر، در حافظه ذخیره نمایید.همان‌طور که در تصویر مشاهده می‌کنید، باید به انتهای اعداد مورد نظر n اضافه کنید. این n باعث می‌شود که عدد شما به عنوان «BigInt» شناسایی شده و توسط موتورهای جاوااسکریپت (V8 یا هر موتور دیگری که استفاده می‌کنید) به طور متفاوت تفسیر و اجرا شود.این اعداد را نمی‌توان به دیتا تایپ قبلی اعداد تبدیل کرد، چرا که آن‌ نوع داده‌ی قدیمی دارای سیستم IEEE754 می‌باشد و قابلیت ذخیره کردن اعداد بزرگ‌تر از مقدار گفته شده (MAX SAFE INTEGER) را ندارد.۲. ویژگی Dynamic Importقابلیت «Dynamic import» به شما این امکان را می‌دهد که فایل‌های جاوااسکریپت دیگری را به صورت پویا و محلی، به عنوان ماژول در برنامه‌ی خود وارد کنید.این دقیقاً همان کاری است که تا پیش از این توسط Webpack و Babel انجام می‌شد.این ویژگی به شما کمک می کند تا بدون استفاده از Webpack یا انواع دیگر module bundlerها، کدهای مورد تقاضا (شناخته شده به‌عنوان code splitting) را به فایل ارسال کنید. همچنین می‌توانید در صورت نیاز، این کار را به صورت شرطی، در یک بلاک کد if-else قرار دهید.نکته‌ی قابل توجه آن است که شما در واقع یک ماژول را در برنامه وارد می‌کنید و این اتفاق هرگز یک Global Namespace را اشغال نمی‌کند.۳. عملگر Nullish Coalescingعملگر جدیدی به نام «Nullish Coalescing» قابلیتی را به جاوااسکریپت افزوده که توسط آن می‌توان به جای تشخیص مقدارهای «falsey»، مقدارهای «nullish» را بررسی کرد. اما تفاوت این دو نوع در چیست؟در جاوااسکریپت مقدارهایی وجود دارند که اصطلاحاً به آن‌ها «falsey values» گفته می‌شود، این مقدارها عبارت‌اند از: رشته‌های توخالی، عدد صفر NaN، null، false، undefined و دیگر مقدارهایی که ماهیت غلط دارند.گاهی ممکن است بخواهید یک متغیر «nullish» را تشخیص دهید و این یعنی متغیر مورد نظر یکی از دو حالت null یا undefined می‌باشد.برای این کار باید از عملگر «??» استفاده کنید.۴. سینتکس Optional Chainingسینتکس «Optional Chaining» به شما اجازه‌ی دسترسی عمیق به آبجکت‌های تودرتو را می‌دهد و در صورتی که آبجکت خوانده شده وجود نداشته باشد، مقدار undefined بازگردانده می‌شود.همچنین این ویژگی برای فراخوانی توابع و آرایه‌ها نیز به کار می‌رود.۵. متد Promise.allSettledمتد «Promise.allSettled» آرایه‌ای از «Promise»ها را می‌پذیرد و زمانی که همه آبجکت‌های داخل آرایه یکی از دو حالت معین «fulfilled» یا «rejected» باشند، تصمیم‌گیری می کند و به عنوان خروجی آرایه‌ای را برمی‌گرداند که هر آبجکت آن نتیجه‌‌ی Promise را نشان می‌دهد.۶.متد matchAll در رشته‌ها«matchAll» یک متد جدید اضافه شده به پروتوتایپ String می‌باشد که به Regular Expressions مربوط است. این متد یک پیمایشگر را در طول رشته حرکت می‌دهد و یکی پس از دیگری برای هر کاراکتر اطلاعات گروهی را نمایش می‌دهد.۷. ویژگی globalThisاگر شما کدهایی را به صورت کراس پلتفرم نوشته باشید که قابلیت اجرایی در Node.js، مرورگرها و web-worker‌ها را داشته باشد حتماً کار وقت‌گیری را برای استفاده از «global object» انجام دادید به دلیل این‌که در Node از «global»، در مرورگرها از «window» و در web-worker‌ها از «self» استفاده می‌شد و اگر ران‌تایم بیشتری هم وجود داشت، این آبجکت global برای هر کدام از آن‌ها متفاوت بود.بنابراین شما مجبور می‌شدید که ران‌تایم را تشخیص دهید و طبق آن global صحیح را انتخاب کنید.اکنون به لطف اکمااسکریپت ۲۰۲۰ این مشکل رفع شده و شما می‌توانید از «globalThis» که همیشه نشان‌دهنده‌ی آبجکت global است، استفاده کنید و فرقی ندارد که کد خود را کجا اجرا می‌کنید.۸. Module Namespace Exportsپیش از این هم، در ماژول‌های جاوااسکریپت امکان نوشتن کد زیر وجود داشت:import * as utils from './utils.mjs'اما تاکنون سینتکس مناسبی برای Export وجود نداشت:export * as utils from './utils.mjs'کد بالا معادل زیر است:import * as utils from './utils.mjs'export { utils }۹. ترتیب در دستور for-inقبلاً اکما ترتیب اجرا شدن دستور ( for ( x in y را مشخص نکرده بود به همین دلیل خود مرورگرها این ترتیب را تعریف و پیاده سازی می‌کردند. اما الان این موضوع به صورت رسمی در اکما ۲۰۲۰ استاندارد سازی شده است.۱۰. Import.metaآبجکت Import.meta توسط اکما اسکریپت، با یک پروتوتایپ null به وجود آمد.یک ماژول به نام module.js را در نظر بگیرید:<script type=&quotmodule&quot src=&quotmodule.js&quot>شما با استفاده از Import.meta می‌توانید به اطلاعات جزئی ماژول دسترسی پیدا کنید:console.log(import.meta); // { url: &quotfile:///home/user/module.js&quot }این قسمت از کد URL ماژول را نشان می‌هد که یکی از دو حالت زیر است:آدرسی که اسکریپت از آن گرفته شده (اسکریپت‌های external)آدرسی که حاوی آن قسمت از داکیومنت است (اسکریپت‌های inline)امروزه جاوااسکریپت به یکی از قوی‌ترین، متنوع‌ترین و فراگیرترین زبان برنامه نویسی تبدیل شده و همچنان در حال توسعه و بهبود می‌باشد که به برنامه نویسان قدرت زیادی را برای پیاده سازی پروژه‌های متفاوت می‌دهد.