آموزش برنامه نویسی - تاپ دمی
ویژگی های جدید ECMAScript 2021

ویژگی های جدید ECMAScript 2021

جاوا اسکریپت

21 شهریور، 1400

پس از معرفی es6 جاوا اسکریپت تغییرات زیادی کرد و حالا هر سال ویژگی های جدید به این زبان برنامه نویسی اضافه می شود. حالا نسخه رسمی es12 معرفی شد که در این مقاله ویژگی های آن را بررسی می کنیم.

پس از معرفی es6 جاوا اسکریپت تغییرات زیادی کرد و هر سال ویژگی های جدید به این زبان برنامه نویسی اضافه می شود. در June 22 آخرین نسخه رسمی es12 (ECMAScript 2021) معرفی شد که در این مقاله ویژگی های آن را بررسی می کنیم.

Numeric separators -1

این قابلیت کمک میکند تا اعداد بزرگ خوانایی بالاتری داشته باشند با یک مثال ساده توضیح میدهیم :

const number = 1000000000

در مثال بالا دیدیم که خوانایی عدد کم است حالا با استفاده از (_) می توانیم ارقام عدد را جدا کنیم.

const number = 1_000_000_000 

2- () String replaceAll

با یک مثال این قابلیت را توضیح می دهیم :

میخواهیم کلمه world را در جمله my world is the best world با کلمه friend جا به جا کنیم در حالت کلی می توانیم از متد replace() استفاده کنیم به صورت زیر

let myString = "My world is the best world"

let replace = myString.replace('world', 'friend');

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

let myString = "My world is the best world"

let replace = myString.replaceAll('world', 'friend');

با استفاده از این متد در همه جای متن به دونباله کلمه مورد نظر میگردد و جا گزینی را انجام می دهد.

weakRef –3

weakRef مخفق Weak references است . جاوا اسکیریپ قابلیت garbage collector را دارد یعنی object های که دارای رفرنس نباشند را حذف می کند. با استفاده از weakRef می توانیم از نگهداری object در حافظ جلوگیری کنیم. برای استفاده از این قابلیت باید از WeakRef یک شی جدید بسازیم و با استفاده از متد deref() به رفرنسمان دسترسی داشته باشیم

const myObject = new weakRef({
    name: "mohammad",
    type: "user"
});

myObject.derref();
myObject.derref().name;
myObject.derref().type;

4- promise.any

یکی دیگر از ویژگی های جدید promise.any می باشد این متد آرایه ای از پرومیس هارا گرفته و به محض این که فقط یکی از آنها resolves شود این متد هم resolves می شود و در صورتی که هیچ دام از پرومیس ها resolves نشود ارور AggregateError نمایش داده می شود.

const A = new Promise((resolve, reject) => {
    setTimeout(() => resolve('A'), 200)
});
const B = new Promise((resolve, reject) => {
    setTimeout(() => resolve('B'), 400)
});
const C = new Promise((resolve, reject) => {
    setTimeout(() => reject('C'), 200)
});
const D = new Promise((resolve, reject) => {
    setTimeout(() => reject('D'), 400)
});

const resolvedPromises = async () => {
    const resolved = await Promise.any([A, B]);
    console.log(resolved);
}

const rejectPromises = async () => {
    const reject = await Promise.any([A, B]);
    console.log(reject);
}

resolvedPromises();
rejectPromises();

5- Private getters and setters

همانند کلاس های خصوصی ،setter و getter خصوصی نیز قابل تعریف است.

class Something {
    get#NAme() {
        console.log('hello mohammad')
    }

    set Name(value) {}

    get showAge() {
        this.#Name  
    }
}

const instance = new Something();
instance.name; // undefined
instance.showAge; // hello mohammad

6-Private class methods

در این ویژگی می توان با قرار دادن # متد یا پروپرتی را به صورت پرایویت تعریف کرد.

class CustomClass {
    #privateMethod() {
        return 'hello world';
    }

    getPrivateMessage() {
        return this.#privateMethod();
    }
}

const instance = new CustomClass ();
console.log(instance.getPrivateMessage())

7- logical assignment operator

(??=) -> (x ??= y) فقط درصورتی که x خالی یا تعریف نشده باشد تخصیص(assignment ) را انجام می دهد در مثال زیر در صورتی که متغییر سمت چپ یکی از undefined or null باشد عملیات انجام می شود.

const a = { time:50 };

a.time ??= 10;
console.log(a.duration)
// 50

a.age ??= 25;
console.log(a.speed)
// 25

(&&=) -> (x &&=y) فقط درصورتی که x مقداری درست باشد تخصیص(assignment ) را انجام می دهد در مثال زیر درصورتی که متغییر سمت چپ مخالف null,undefined, false, 0, or NaN باشد عملیات انجام می شود.

let a = 1;
let b =0;

a &&= 2;
console.log(a);
// 2

b &&= 2;
console.log(b);
// 0

(||?) -> (x ||=y ) فقط درصورتی که x مقداری نادرست باشد تخصیص (assignment ) را انجام می دهد.

در مثال زیر در صورتی که متغییر سمت چپ null, undefined, false, or 0 باشد عملیات انجام می شود.

const a = {time:50, name: ''};

a.time ||= 10;
console.log(a.time);
// 50

a.name ||= 'my title';
console.log(a.name);
// my title

توسعه دهنده وب

تقريبا ٩ سال از اولين سايتي كه طراحي كردم ميگذره ، این اشتیاق از آن زمان ادامه پیدا کرد که در نهایت من به عنوان یک توسعه دهنده وب مشغول به كار شدم. طي اين سال ها تجربه اي كه از شركت در پروژه ها و چالش هاي ياگيري برنامه نویسی بدست آوردم ، تصميم گرفتم كه اين تجربه رو با بقيه اشتراك بزارم كه نتیجه ی آن شد تاپ دمی.

مقالات مشابه