
چند روزی میشه که نسخهی پایدار Node.js به نسخهی v14 بروزرسانی شده. با این بروزرسانی علاوه بر بهبودهای مختلف ما میتونیم از ویژگیهای ECMAScript 2020توی کدهامون به صورت پایدار استفاده کنیم. این کار کمکمون میکنه که کدهای بهتر و پایدارتری بنویسیم. با هم قراره که این ویژگیها رو توی این نوشته بررسی کنیم.

تا قبل از نسخه 2020 برای اینکه null error exception نخوریم مجبور بودیم null نبودن تمام پراپرتیهای درونی یک شی رو با نوشتن یک عالمه if چک کنیم. حالا با اومدن این ویژگی همه چی به شکل آب خوردن شدنه!
const employee = { name: "Alice", }; const person = employee.address?.city; console.log(person); // results in undefined as city is not existing in employee object
با استفاده از این اپراتور میتونیم مشخص کنیم که اگر مقدار سمت چپ عبارت برابر با nullیا undefined بود با مقدار سمت راست عبارت جایگزین بشه.
const person = null ?? "my Name" console.log(person); // prints "my Name" const myNumber = 0 ?? 42; console.log(myNumber) // prints 0
در جاوااسکریپت import کردن یک ماژول تا به حال صورت کاملا strict و static صورت میپذیرفت. بعد از کلمهی کلیدی import ما فقط مجاز به استفاده از یک رشته متنی بودیم و به طور مثال حق استفاده از یک تابع رو نداشتیم.
import ... from getModuleName();//Error, only from "string" is allowed
یا نمیتونستیم به صورت dynamic مقدار import رو تغییر بدیم.
if (...) { import ...; // Error, not allowed! } else { import ...; // Error, we can't put import in any block }
که البته مزیتهای زیادی توی آنالیز یا bundle بهتر کد در اختیار ما میگذاشت. حالا با استفاده از عبارت ()import این موضوع تغییر کرده و ما میتونیم به صورت پویا یک ماژول رو import کنیم و این کار رو هر قسمت از کد هم میتونیم انجام بدیم.
const moduleToImport = "./dir/myModule.js" import(moduleToImport).then((module) => module.myFun());
با استفاده از عبارت import() ما یک promise به دست میاریم.
تا قبل از ECMAScript 2020 نسخهی استاندارد ECMAScript برای پشتیبانی از اعداد وابسته به مقدار 64-bit floating point numbers بود. اما از این نسخه به بعد اعداد بدون اعشار نوع اختصاصی خودشون به نام bigint رو پیدا کردند.
console.log(typeof 123n) // "bigint"
در ECMAScript 2020 متد () matchAll به نوع String اضافه شده. این متد عبارتهای match شده یک regular expression رو به صورت یکدفعه برمیگردونه.
let regexp = /t(e)(st(\d?))/g; let str = "test1test2" let array = [...str.matchAll(regexp)]; console.log(array[0]); // ["test1","e","st1","1"]
این ویژگی به ما کمک میکنه که پس از حل شدن وضعیت تمام Promiseهای وابسته اعم از اینکه resolve بشن یا اینکه reject بشن یک Promise صادر بشه. اینجوری ما متوجه میشیم که Promiseهای وابسته به سرانجام خودشون رسیدند و کارهای بعدی رو میتونیم از سر بگیریم.
const promise1 = Promise.resolve(3); const promise2 = new Promise((resolve, reject) => setTimeout(reject, 100, "foo") );
const promises = [promise1, promise2]; Promise.allSettled(promises).then((results) => results.forEach((result) => console.log(result.status)));
// expected output: // "fulfilled" // "rejected"
به صورت تاریخی برای دسترسی به شی global در محیط مختلف اجرای جاوا اسکریپت نیازمند Syntaxهای متفاوت بود. برای مثال توی web میتونستیم از window، self و یا frame با با توجه به محیط اجرای کدمون استفاده کنیم. در حالی که هیچ کدوم از کلمات کلیدی بالا در محیط nodejs کاربردی نداشت و در این محیط باید از کلمهی کلیدی global استفاده میکردیم. توی ECMAScript 2020 با استفاده از کلمهی کلیدی globalThis این مشکل حل شده.