۸ قابلیت جدید جاوااسکریپت ES2020

Javascript ES2020
Javascript ES2020

اینجاییم تا نگاهی بندازیم به هشت قابلیت جدید جاوا اسکریپت ES2020 .


قابلیت اول: BigInt

یکی از قابلیت‌های پیش‌بینی شده در جاوا اسکریپت BigInt بود. خب همونطور که میدونید در واقع به برنامه‌نویسان جاوا اسکریپت این امکان رو میده که از اعداد بزرگتری استفاده کنن و محدودیت های قبل رو نداشته باشن.

ES2020 BigInt
ES2020 BigInt

با این حال، همونطور که در عکس دیدید، باید در انتهای عدد یک n داشته باشید. این n بیانگر اینه که مقدار شما یک BigInt هست و باید با موتور JavaScript (توسط موتور v8 یا هر موتور دیگه‌ای که از اون استفاده می‌کنه) متفاوت رفتار بشه.



قابلیت دوم: Dynamic import

این قابلیت در ES2020 به شما این امکان رو میده که فایل‌های جاوا اسکریپت رو به صورت داینامیک به عنوان ماژول در برنامه خودتون وارد کنید. این کاملا شبیه نحوه انجام همین عمل در Webpack و Babel هست.

این ویژگی به شما کمک می‌کنه تا کدهای split شده تون رو بدون سربار شدن webpack یا سایر module bundler ها ارسال کنید.

نکته خوب اینه که شما در واقع دارید یک ماژول رو وارد می‌کنید، بنابراین هیچوقت فضای نامی global رو تحت اثر قرار نمیده.

ES2020 Dynamic Import
ES2020 Dynamic Import



قابلیت سوم: Nullish Coalescing

این قابلیت بسیار جالبه و به شما امکان بررسی واقعی مقادیر Nullish رو به جای مقادیر falsey میده. امکان داره بپرسید تفاوت مقادیر Nullish و falsey چیه؟ در جاوا اسکریپت خیلی از مقادیر falsey هستند، مانند رشته های خالی، عدد 0 ، undefined ، null ، false ، NaN و غیره. با این وجود بسیاری از اوقات ممکنه نیاز داشته باشید تا بررسی کنید که یک متغیر nullish هست یا خیر. یعنی اگر undefined یا null باشه ، مانند زمانی که یک متغیر از نظر شما اجازه داره یک رشته خالی یا حتی مقدار false داشته باشه.

در این حالت ، شما باید از عملوند جدیدی به نام Nullish Coalescing (دو تا علامت سوال) استفاده کنید.

ES2020 Nullish Coalescing
ES2020 Nullish Coalescing



قابلیت چهارم: Optional Chaining

این قابلیت واقعا عالیه. به شما این امکان رو میده که بدون نگرانی از وجود یک خاصیت یا عدم وجودش، به‌طور عمیق ازش استفاده کنید. اگه خاصیت مورد نظر وجود داشته باشه که قطعا مشکلی نیست! اما اگه این‌طور نباشه چی؟ شما معمولا این موقع چیکار میکردین؟ قطعا قبلش بررسی میکردین که خاصیت وجود داره یا نه و بعدش بهش دسترسی پیدا میکردین و قطعا شرطتون خیلی طولانی میشد. راهکار ES2020 برای حل این مسئله خیلی کاربردیه.

این قابلیت نه‌تنها روی خاصیت‌های آبجکت‌ها، حتی در فراخوانی ها و آرایه ها هم کار می کند. به تصویر زیر دقت کنید:



قابلیت پنجم: Promise.allSettled

این متد آرایه‌ای از Promise ها رو دریافت میکنه و فقط در صورت حل و فصل همه اونها یا حل یا رد میشه.

به تصویر زیر توجه کنید:

ES2020 Promise.allSettled
ES2020 Promise.allSettled



قابلیت ششم: String#matchAll

این قابلیت روشی جدیده که به نمونه اولیه String اضافه شده و مربوط به عبارت با قاعده یا Regular Expressions هست. این یک شمارنده یا iterator هست که همه گروه های همسان رو یکی پس از دیگری بر می‌گردونه. برای درک بهتر تصویر زیر رو ببینید:

ES2020 String#matchAll
ES2020 String#matchAll



قابلیت هفتم: globalThis

اگر شما کد جاوا اسکریپت Cross-Platform نوشته باشید و بخواید روی Node اجراش کنید، در محیط مرورگر و همچنین در web worker ها کار کنه ، قطعا شما وقت زیادی صرف مدیریت آبجکت‌های global خواهید کرد.

دلیل این امر اینه که window برای مرورگر، global برای Node و self برای web worker ها هست. اگر زمان اجرا بیشتر باشه، آبجکت global برای اونها متفاوت خواهد بود. بنابراین شما باید در پیاده‌سازی و تشخیص زمان اجرا دقت لازم رو داشته باشید.

در ES2020 فرقی نمیکنه که شما کدتون رو کجا اجرا می‌کنید. globalThis همیشه به آبجکت global اشاره میکنه. تصویر زیر رو ببینید:

ES2020 globalThis
ES2020 globalThis



قابلیت هشتم: Module Namespace Exports

پیش از این در ماژول های JavaScript جهت import کردن امکان استفاده از روش زیر وجود داشت:

import * as utils from './utils.mjs'

با این حال، هیچ روشی شبیه بالا برای export کردن ماژول‌ها مثل پایین وجود نداشت:

export * as utils from './utils.mjs'

ولی حالا میتونید از روش پایین استفاده کنید:

import * as utils from './utils.mjs'
export { utils }


کلام آخر:

قطعا این روزها شاهد پیشرفت خوبی در جاوا اسکریپت هستیم و این قابلیت‌های جدید گاهی خیلی به کارمون میاد و به کارمون سرعت میبخشه. از مواردی که گفته شد کدومش برای شما جالب تر بود؟

خوشحال میشم در صورت نیاز جهت بهبود مطلب یا رفع اشکالات، نظراتتون رو بشنوم.