بررسی ویژگی‌های جدید ECMAScript 2020

ECMAScript 2020 New featuresچند روزی میشه که نسخه‌ی پایدار Node.js به نسخه‌ی v14 بروزرسانی شده. با این بروزرسانی علاوه بر بهبود‌های مختلف ما می‌تونیم از ویژگی‌های ECMAScript 2020توی کدهامون به صورت پایدار استفاده کنیم. این کار کمکمون میکنه که کدهای بهتر و پایدارتری بنویسیم. با هم قراره که این ویژگی‌ها رو توی این نوشته بررسی کنیم.جدول 1 زمانی نسخه های مختلف NodeJS پراپرتی امن یا (?.) Optional Chaining operatorتا قبل از نسخه 2020 برای اینکه null error exception نخوریم مجبور بودیم null نبودن تمام پراپرتیهای درونی یک شی رو با نوشتن یک عالمه if چک کنیم. حالا با اومدن این ویژگی همه چی به شکل آب خوردن شدنه!const employee = { name: &quotAlice&quot, }; const person = employee.address?.city; console.log(person); // results in undefined as city is not existing in employee objectاپراتور جایگزینی مقادیر نال یا (??) Nullish coalescing operator با استفاده از این اپراتور میتونیم مشخص کنیم که اگر مقدار سمت چپ عبارت برابر با nullیا undefined بود با مقدار سمت راست عبارت جایگزین بشه.const person = null ?? &quotmy Name&quot console.log(person); // prints &quotmy Name&quot const myNumber = 0 ?? 42; console.log(myNumber) // prints 0ویژگی Dynamic importsدر جاوااسکریپت import کردن یک ماژول تا به حال صورت کاملا strict و static صورت میپذیرفت. بعد از کلمه‌ی کلیدی import ما فقط مجاز به استفاده از یک رشته متنی بودیم و به طور مثال حق استفاده از یک تابع رو نداشتیم.import ... from getModuleName();//Error, only from &quotstring&quot 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 = &quot./dir/myModule.js&quot import(moduleToImport).then((module) => module.myFun());با استفاده از عبارت import() ما یک promise به دست میاریم.افزوده شدن پشتیانی از Bigint و Uint64تا قبل از ECMAScript 2020 نسخه‌ی استاندارد ECMAScript برای پشتیبانی از اعداد وابسته به مقدار 64-bit floating point numbers بود. اما از این نسخه به بعد اعداد بدون اعشار نوع اختصاصی خودشون به نام bigint رو پیدا کردند.console.log(typeof 123n) // &quotbigint&quotویژگی () String.prototype.matchAllدر ECMAScript 2020 متد () matchAll به نوع String اضافه شده. این متد عبارت‌های match شده یک regular expression رو به صورت یکدفعه برمیگردونه.let regexp = /t(e)(st(\d?))/g; let str = &quottest1test2&quot let array = [...str.matchAll(regexp)]; console.log(array[0]); // [&quottest1&quot,&quote&quot,&quotst1&quot,&quot1&quot]ویژگی Promise.allSettledاین ویژگی به ما کمک میکنه که پس از حل شدن وضعیت تمام Promiseهای وابسته اعم از اینکه resolve بشن یا اینکه reject بشن یک Promise صادر بشه. اینجوری ما متوجه میشیم که Promiseهای وابسته به سرانجام خودشون رسیدند و کارهای بعدی رو میتونیم از سر بگیریم.const promise1 = Promise.resolve(3); const promise2 = new Promise((resolve, reject) => setTimeout(reject, 100, &quotfoo&quot) );const promises = [promise1, promise2]; Promise.allSettled(promises).then((results) => results.forEach((result) => console.log(result.status)));// expected output: // &quotfulfilled&quot // &quotrejected&quotویژگی Runtime Independent globalThisبه صورت تاریخی برای دسترسی به شی global در محیط مختلف اجرای جاوا اسکریپت نیازمند Syntaxهای متفاوت بود. برای مثال توی web میتونستیم از window، self و یا frame با با توجه به محیط اجرای کدمون استفاده کنیم. در حالی که هیچ کدوم از کلمات کلیدی بالا در محیط nodejs کاربردی نداشت و در این محیط باید از کلمه‌ی کلیدی global استفاده می‌کردیم. توی ECMAScript 2020 با استفاده از کلمه‌ی کلیدی globalThis این مشکل حل شده.منابع: + و + و + و +.