ES12 (ECMAScript 2021) چند ویژگی جدید به جاوااسکریپت اضافه کرد که تجربه کدنویسی را بهبود میبخشد. در ادامه، ۵ ویژگی متحولکنندهی این نسخه با مثال توضیح داده شدهاند:
1. String.prototype.replaceAll
در نسخههای قبلی، تابع replace
فقط اولین وقوع یک رشته را جایگزین میکرد. در ES12، متد replaceAll
به شما اجازه میدهد همهی موارد مطابقت دادهشده با یک رشته یا الگو را جایگزین کنید.
const text = "JavaScript is great, and JavaScript is popular!";
const newText = text.replaceAll("JavaScript", "TypeScript");
console.log(newText); // TypeScript is great, and TypeScript is popular!
2. Promise.any
این ویژگی مشابه Promise.race
است، اما با این تفاوت که Promise.any
زمانی که اولین Promise
با موفقیت اجرا شود، نتیجه را برمیگرداند. اگر همهی Promise
ها شکست بخورند، خطا بازگشت داده میشود.
const promise1 = Promise.reject('Error 1');
const promise2 = new Promise((resolve) => setTimeout(resolve, 100, 'Result 2'));
const promise3 = new Promise((resolve) => setTimeout(resolve, 200, 'Result 3'));
Promise.any([promise1, promise2, promise3])
.then(result => console.log(result)) // Result 2
.catch(error => console.log(error));
3. WeakRefs و FinalizationRegistry
با استفاده از WeakRef
، میتوان ارجاع ضعیفی به یک شیء داشت که باعث میشود این شیء برای جمعآوری زباله آماده باشد. FinalizationRegistry
به شما اجازه میدهد زمانی که یک شیء از بین رفت، عملیات خاصی انجام دهید.
let obj = { name: "Object" };
const weakRef = new WeakRef(obj);
// بعد از مدتی، obj ممکن است توسط garbage collector حذف شود.
obj = null;
const derefObj = weakRef.deref();
console.log(derefObj ? derefObj.name : "Object has been garbage collected");
4. Numeric Separators
این ویژگی کد را خواناتر میکند و به ما اجازه میدهد که از خط تیره برای جدا کردن اعداد بزرگ استفاده کنیم، بدون اینکه روی مقدار واقعی تأثیر بگذارد.
const bigNumber = 1_000_000_000; // معادل 1000000000
console.log(bigNumber); // 1000000000
5. Logical Assignment Operators
عملگرهای تخصیص منطقی (Logical Assignment) ترکیبی از عملگرهای منطقی و تخصیص هستند. این عملگرها شامل &&=
, ||=
, و ??=
میشوند.
let x = false;
let y = true;
x ||= y; // x = x || y
console.log(x); // true
let a = null;
let b = "Default";
a ??= b; // a = a ?? b
console.log(a); // "Default"
این ویژگیها باعث میشوند کدهای جاوااسکریپت کوتاهتر، خواناتر و بهینهتر شوند.