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