طراح، تحلیلگر، برنامهنویس بک اند و مدیر دیتابیس. علاقمند به فیلم و سریال، اهل پادکست و سفر، طرفدار زندگی و عاشق گفتگو :)
بررسی ویژگیهای جدید ECMAScript 2020
چند روزی میشه که نسخهی پایدار Node.js به نسخهی v14 بروزرسانی شده. با این بروزرسانی علاوه بر بهبودهای مختلف ما میتونیم از ویژگیهای ECMAScript 2020توی کدهامون به صورت پایدار استفاده کنیم. این کار کمکمون میکنه که کدهای بهتر و پایدارتری بنویسیم. با هم قراره که این ویژگیها رو توی این نوشته بررسی کنیم.
پراپرتی امن یا (?.) Optional Chaining operator
تا قبل از نسخه 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
اپراتور جایگزینی مقادیر نال یا (??) Nullish coalescing operator
با استفاده از این اپراتور میتونیم مشخص کنیم که اگر مقدار سمت چپ عبارت برابر با nullیا undefined بود با مقدار سمت راست عبارت جایگزین بشه.
const person = null ?? "my Name"
console.log(person);
// prints "my Name"
const myNumber = 0 ?? 42;
console.log(myNumber)
// prints 0
ویژگی Dynamic imports
در جاوااسکریپت 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 به دست میاریم.
افزوده شدن پشتیانی از Bigint و Uint64
تا قبل از ECMAScript 2020 نسخهی استاندارد ECMAScript برای پشتیبانی از اعداد وابسته به مقدار 64-bit floating point numbers بود. اما از این نسخه به بعد اعداد بدون اعشار نوع اختصاصی خودشون به نام bigint رو پیدا کردند.
console.log(typeof 123n)
// "bigint"
ویژگی () String.prototype.matchAll
در 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.allSettled
این ویژگی به ما کمک میکنه که پس از حل شدن وضعیت تمام 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"
ویژگی Runtime Independent globalThis
به صورت تاریخی برای دسترسی به شی global در محیط مختلف اجرای جاوا اسکریپت نیازمند Syntaxهای متفاوت بود. برای مثال توی web میتونستیم از window، self و یا frame با با توجه به محیط اجرای کدمون استفاده کنیم. در حالی که هیچ کدوم از کلمات کلیدی بالا در محیط nodejs کاربردی نداشت و در این محیط باید از کلمهی کلیدی global استفاده میکردیم. توی ECMAScript 2020 با استفاده از کلمهی کلیدی globalThis این مشکل حل شده.
مطلبی دیگر از این انتشارات
ساخت یک سیستم اطلاع رسانی درون سازمانی قسمت دوم
مطلبی دیگر از این انتشارات
بررسی عملکرد حلقه forEach در جاوا اسکریپت
مطلبی دیگر از این انتشارات
10 ترفند کمکی برای کوتاه کردن کدهای جاوا اسکریپتی قسمت دوم