2018 (2018)
در «جاوااسکریپت 2018»، چند قابلیت مهم آمد: تکرار ناهمگام، Promise.finally()، عملگر Rest در آرایه و شیء، ویژگی های تازه الگوهای باقاعده (RegExp)، و «حافظه مشترک». همه را با مثال کوتاه می بینیم.
تکرار ناهمگام (Asynchronous Iteration)
«ناهمگام (Asynchronous)» یعنی کارها منتظر هم نمی مانند. با آن می توان داخل حلقه for...of از await استفاده کرد.
async function main() {
for await (const v of []) {
// no items, just syntax demo
}
}
main();
Promise.finally(); پایان کار، چه موفق چه خطا
«وعده (Promise)» کاری است که بعداً نتیجه می دهد. finally() همیشه در پایان اجرا می شود.
let p = Promise.resolve("ok");
p.then(() => {
// success
});
p.catch(() => {
// error
});
p.finally(() => {
// always
});
عملگر Rest در آرایه ها
«Rest» یعنی باقی مانده ها را جمع کن. در واگشایی (Destructuring) آرایه، بقیه اعضا در یک آرایه می روند.
let a;
let rest;
const arr1 = [1, 2, 3, 4, 5, 6, 7, 8];
[a, ...rest] = arr1;
let a2;
let b2;
let rest2;
const arr2 = [1, 2, 3, 4, 5, 6, 7, 8];
[a2, b2, ...rest2] = arr2;
عملگر Rest در شیء
در واگشایی شیء، با ... بقیه ویژگی ها را در شیئی جدید جمع می کنیم.
const car = { type: "Fiat", model: "500", color: "white" };
const { type, ...leftovers } = car;
RegExp: پرچم /s (dotAll)
«الگو (RegExp)» برای جست وجو در متن است. پرچم /s باعث می شود . خط جدید را هم ببیند.
let text = "Line\nLine.";
let pattern = /Line./gs;
let result = text.match(pattern);
RegExp: ویژگی های یونیکد \p{...}
با \p{...} می توان بر اساس ویژگی یونیکد جست وجو کرد؛ مثلاً ایموجی.
let text = "Hello \u{1F604}";
let pattern = /\p{RGI_Emoji}/v;
let isEmoji = pattern.test(text);
RegExp: Lookbehind (پس نگر)
«پس نگر (Lookbehind)» می گوید تنها وقتی مطابق شو که قبلش الگوی خاصی باشد.
let txt = "Hello W3Schools";
let ok = /(?<=Hello )W3Schools/.test(txt);
RegExp: منفیِ Lookbehind
اینجا می خواهیم قبل از الگو چیزی نباشد. اگر بود، تطبیق نشود.
let t = "Hello W3Schools";
let ok2 = /(?<!Hi )W3Schools/.test(t);
RegExp: گروه گیری نام دار
با «گروه نام دار (Named Group)» نتیجه ها اسم می گیرند و خواناتر می شوند.
const text2 = "Name: John Doe";
const rx = /(?<firstName>\w+) (?<lastName>\w+)/;
const m = text2.match(rx);
let fName = m.groups.firstName;
let lName = m.groups.lastName;
Shared Memory؛ داده مشترک بین نخ ها
«نخ (Thread)» یعنی اجرای هم زمان. با SharedArrayBuffer چند بخش برنامه به یک حافظه دسترسی دارند.
نکته: برای کار عملی، سراغ Web Workers و مستندات مرورگر برو.
گام های تمرین سریع
- یک آرایه را با Rest واگشایی کن و بقیه را بردار.
- روی متن چندخطی،
/sرا باmatch()امتحان کن. - یک
Promiseبساز وfinally()را تست کن.
جمع بندی سریع
- داخل حلقه هم می شود
awaitنوشت. finally()همیشه در پایان اجرا می شود.- Rest بقیه داده ها را جمع می کند.
- RegExp قدرتمندتر و خواناتر شد.
ادامه مسیر: برو به «جاوااسکریپت 2019»، یا برگرد به «جاوااسکریپت 2017».