پس از معرفی 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
توسعه دهنده وب
تقريبا ٩ سال از اولين سايتي كه طراحي كردم ميگذره ، این اشتیاق از آن زمان ادامه پیدا کرد که در نهایت من به عنوان یک توسعه دهنده وب مشغول به كار شدم. طي اين سال ها تجربه اي كه از شركت در پروژه ها و چالش هاي ياگيري برنامه نویسی بدست آوردم ، تصميم گرفتم كه اين تجربه رو با بقيه اشتراك بزارم كه نتیجه ی آن شد تاپ دمی.
- آموزش ساخت صفحه ی وب سایت با استفاده از HTML و css
- ساخت فروشگاه اینترنتی با html ، css و bootstrap - بخش اول
- آموزش نصب ، راه اندازی و کامپایل sass
- میانبر های مفید ادیتور VSCode
- سوالات مصاحبه ای از php و لاراول
این مقاله چقدر مفید بود ؟