Ðвома найбÑлÑÑ Ð²Ð¶Ð¸Ð²Ð°Ð½Ð¸Ð¼Ð¸ ÑÑÑÑкÑÑÑами даниÑ
Ñ JavaScript Ñ Object Ñа Array.
- ÐбâÑкÑи дозволÑÑÑÑ Ð½Ð°Ð¼ ÑÑвоÑиÑи ÑÐ´Ð¸Ð½Ñ ÑÑÑнÑÑÑÑ, Ñка збеÑÑгаÑиме Ð´Ð°Ð½Ñ Ð·Ð° клÑÑем.
- ÐаÑиви дозволÑÑÑÑ Ð½Ð°Ð¼ зÑбÑаÑи елеменÑи Ð´Ð°Ð½Ð¸Ñ Ñ Ð²Ð¿Ð¾ÑÑдкований ÑпиÑок.
Ðднак, коли ми пеÑедаÑмо ÑÑ Ñ ÑÑнкÑÑÑ, нам може знадобиÑиÑÑ Ð½Ðµ вÑе. ФÑнкÑÑÑ Ð¼Ð¾Ð¶ÑÑÑ Ð·Ð½Ð°Ð´Ð¾Ð±Ð¸ÑиÑÑ Ð»Ð¸Ñе Ð¿ÐµÐ²Ð½Ñ ÐµÐ»ÐµÐ¼ÐµÐ½Ñи або влаÑÑивоÑÑÑ.
ÐеÑÑÑÑкÑÑÑоване пÑиÑвоÑÐ½Ð½Ñ â Ñе ÑпеÑÑалÑний ÑинÑакÑиÑ, Ñо дозволÑÑ Ð½Ð°Ð¼ âÑозпаковÑваÑиâ маÑиви Ñи обâÑкÑи в кÑÐ¿Ñ Ð·Ð¼ÑÐ½Ð½Ð¸Ñ , оÑкÑлÑки ÑÐ½Ð¾Ð´Ñ Ñе зÑÑÑнÑÑе.
ÐеÑÑÑÑкÑÑÑÑÐ²Ð°Ð½Ð½Ñ Ñакож ÑÑдово пÑаÑÑÑ Ð·Ñ Ñкладними ÑÑнкÑÑÑми, ÑÐºÑ Ð¼Ð°ÑÑÑ Ð±Ð°Ð³Ð°Ñо паÑамеÑÑÑв, ÑÐ¸Ð¿Ð¾Ð²Ð¸Ñ Ð·Ð½Ð°ÑÐµÐ½Ñ ÑоÑо. ÐезабаÑом ми Ñе побаÑимо.
ÐеÑÑÑÑкÑÑÑÑÐ²Ð°Ð½Ð½Ñ Ð¼Ð°ÑивÑ
ÐÑÑ Ð¿Ñиклад Ñого, Ñк маÑив деÑÑÑÑкÑÑÑÑÑÑÑÑÑ Ð½Ð° змÑннÑ:
// Ñ Ð½Ð°Ñ Ñ Ð¼Ð°Ñив з Ñменем Ñа пÑÑзвиÑем
let arr = ["Ðван", "ÐеÑÑенко"]
// деÑÑÑÑкÑÑÑоване пÑиÑвоÑннÑ
// вÑÑановлÑÑ firstName = arr[0]
// Ñа surname = arr[1]
let [firstName, surname] = arr;
alert(firstName); // Ðван
alert(surname); // ÐеÑÑенко
Ð¢ÐµÐ¿ÐµÑ Ð¼Ð¸ можемо пÑаÑÑваÑи Ð·Ñ Ð·Ð¼Ñнними замÑÑÑÑ ÐµÐ»ÐµÐ¼ÐµÐ½ÑÑв маÑивÑ.
Це ÑÑдово виглÑÐ´Ð°Ñ Ð² поÑÐ´Ð½Ð°Ð½Ð½Ñ Ð·Ñ split або ÑнÑими меÑодами повеÑÐ½ÐµÐ½Ð½Ñ Ð¼Ð°ÑивÑ:
let [firstName, surname] = "Ðван ÐеÑÑенко".split(' ');
alert(firstName); // Ðван
alert(surname); // ÐеÑÑенко
Як баÑиÑе, ÑинÑакÑÐ¸Ñ Ð¿ÑоÑÑий. ХоÑа Ñ ÐºÑлÑка оÑÐ¾Ð±Ð»Ð¸Ð²Ð¸Ñ Ð´ÐµÑалей. ÐавайÑе ÑозглÑнемо бÑлÑÑе пÑикладÑв, Ñоб кÑаÑе Ñе зÑозÑмÑÑи.
Це називаÑÑÑÑÑ âдеÑÑÑÑкÑÑÑоване пÑиÑвоÑннÑâ, оÑкÑлÑки воно âдеÑÑÑÑкÑÑÑÑÑâ ÑлÑÑ Ð¾Ð¼ копÑÑÐ²Ð°Ð½Ð½Ñ ÐµÐ»ÐµÐ¼ÐµÐ½ÑÑв Ñ Ð·Ð¼ÑннÑ. Ðднак, Ñам маÑив не змÑнÑÑÑÑÑÑ.
Це пÑоÑÑо коÑоÑÑий ÑпоÑÑб напиÑаÑи:
// let [firstName, surname] = arr;
let firstName = arr[0];
let surname = arr[1];
ÐÐµÐ±Ð°Ð¶Ð°Ð½Ñ ÐµÐ»ÐµÐ¼ÐµÐ½Ñи маÑÐ¸Ð²Ñ Ñакож можна викинÑÑи за Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ Ð´Ð¾Ð´Ð°ÑÐºÐ¾Ð²Ð¾Ñ ÐºÐ¾Ð¼Ð¸:
// дÑÑгий ÐµÐ»ÐµÐ¼ÐµÐ½Ñ Ð½Ðµ поÑÑÑбен
let [firstName, , title] = ["ЮлÑй", "ЦезаÑ", "ÐонÑÑл", "РимÑÑÐºÐ¾Ñ ÑеÑпÑблÑки"];
alert( title ); // ÐонÑÑл
У Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ð¾Ð¼Ñ Ð²Ð¸Ñе ÐºÐ¾Ð´Ñ Ð´ÑÑгий ÐµÐ»ÐµÐ¼ÐµÐ½Ñ Ð¼Ð°ÑÐ¸Ð²Ñ Ð¿ÑопÑÑкаÑÑÑÑÑ, ÑÑеÑÑй пÑиÑвоÑÑÑÑÑÑ title, а ÑеÑÑа елеменÑÑв маÑÐ¸Ð²Ñ Ñакож пÑопÑÑкаÑÑÑÑÑ (оÑкÑлÑки Ð´Ð»Ñ Ð½Ð¸Ñ
Ð½ÐµÐ¼Ð°Ñ Ð·Ð¼ÑнниÑ
).
â¦ÐаÑпÑавдÑ, ми можемо викоÑиÑÑовÑваÑи його з бÑдÑ-Ñкими даними, ÑÐºÑ Ð¿ÐµÑебиÑаÑÑÑÑÑ, а не ÑÑлÑки з маÑивами:
let [a, b, c] = "abc"; // ["a", "b", "c"]
let [one, two, three] = new Set([1, 2, 3]);
Це пÑаÑÑÑ, ÑÐ¾Ð¼Ñ Ñо внÑÑÑÑÑнÑо деÑÑÑÑкÑÑÑоване пÑиÑвоÑÐ²Ð°Ð½Ð½Ñ Ð¿ÑаÑÑÑ ÑлÑÑ
ом ÑÑеÑаÑÑÑ Ð½Ð°Ð´ пÑавилÑним знаÑеннÑм. Це ÑвоÑÑÑдний ÑинÑакÑиÑний ÑÑÐºÐ¾Ñ Ð´Ð»Ñ Ð²Ð¸ÐºÐ»Ð¸ÐºÑ for..of над знаÑеннÑм пÑавоÑÑÑ Ð²Ñд = Ñ Ð¿ÑиÑвоÑÐ²Ð°Ð½Ð½Ñ Ð·Ð½Ð°ÑенÑ.
Ðи можемо викоÑиÑÑовÑваÑи бÑдÑ-ÑÐºÑ âпÑизнаÑеннÑâ з лÑвого бокÑ.
ÐапÑиклад, влаÑÑивÑÑÑÑ Ð¾Ð±âÑкÑа:
let user = {};
[user.name, user.surname] = "Ðван ÐеÑÑенко".split(' ');
alert(user.name); // Ðван
alert(user.surname); // ÐеÑÑенко
У попеÑеднÑÐ¾Ð¼Ñ ÑоздÑлÑ, ми баÑили меÑод Object.entries(obj).
Ðи можемо викоÑиÑÑовÑваÑи його з деÑÑÑÑкÑÑÑÑваннÑм Ð´Ð»Ñ ÑиклÑÑного пеÑебоÑÑ ÐºÐ»ÑÑÑв-Ñа-знаÑÐµÐ½Ñ Ð¾Ð±âÑкÑа:
let user = {
name: "Ðван",
age: 30
};
// пеÑебÑаÑи Ñиклом клÑÑÑ-Ñа-знаÑеннÑ
for (let [key, value] of Object.entries(user)) {
alert(`${key}:${value}`); // name:Ðван, поÑÑм age:30
}
ÐодÑбний код Ð´Ð»Ñ Map пÑоÑÑÑÑий, оÑкÑлÑки вÑн Ñ ÑÑÑÑкÑÑÑÐ¾Ñ Ð´Ð°Ð½Ð¸Ñ
, Ñка пеÑебиÑаÑÑÑÑÑ:
let user = new Map();
user.set("name", "Ðван");
user.set("age", "30");
// Map ÑÑеÑÑÑ Ñк паÑи [key, value], Ñо дÑже зÑÑÑно Ð´Ð»Ñ Ð´ÐµÑÑÑÑкÑÑÑÑваннÑ
for (let [key, value] of user) {
alert(`${key}:${value}`); // name:Ðван, then age:30
}
ÐÑнÑÑ Ð²Ñдомий ÑÑÑк Ð´Ð»Ñ Ð¾Ð±Ð¼ÑÐ½Ñ Ð·Ð½Ð°ÑÐµÐ½Ñ Ð´Ð²Ð¾Ñ Ð·Ð¼ÑÐ½Ð½Ð¸Ñ Ð·Ð° Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ Ð´ÐµÑÑÑÑкÑÑÑованого пÑиÑвоÑннÑ:
let guest = "Ðжейн";
let admin = "ÐÑÑеÑ";
// ÐавайÑе обмÑнÑÑмо знаÑеннÑ: зÑобÑмо guest=ÐÑÑеÑ, admin=Ðжейн
[guest, admin] = [admin, guest];
alert(`${guest} ${admin}`); // ÐÑÑÐµÑ Ðжейн (ÑÑпÑÑно обмÑнÑлиÑÑ!)
ТÑÑ Ð¼Ð¸ ÑÑвоÑÑÑмо ÑимÑаÑовий маÑив з Ð´Ð²Ð¾Ñ Ð·Ð¼ÑÐ½Ð½Ð¸Ñ Ñ Ð½ÐµÐ³Ð°Ð¹Ð½Ð¾ деÑÑÑÑкÑÑÑÑÑмо його в поÑÑÐ´ÐºÑ Ð¾Ð±Ð¼ÑнÑ.
Таким меÑодом ми можемо помÑнÑÑи мÑÑÑÑми бÑлÑÑе Ð´Ð²Ð¾Ñ Ð·Ð¼ÑÐ½Ð½Ð¸Ñ .
ÐалиÑÐºÐ¾Ð²Ñ Ð¿Ð°ÑамеÑÑи ââ¦â
ÐазвиÑай, ÑкÑо маÑив довÑий вÑд ÑпиÑÐºÑ Ð·Ð»Ñва, âзайвÑâ елеменÑи опÑÑкаÑÑÑÑÑ.
ÐапÑиклад, ÑÑÑ Ð±ÐµÑеÑÑÑÑ Ð»Ð¸Ñе два елеменÑи, а ÑеÑÑа пÑоÑÑо ÑгноÑÑÑÑÑÑÑ:
let [name1, name2] = ["ЮлÑй", "ЦезаÑ", "ÐонÑÑл", "РимÑÑÐºÐ¾Ñ Ð ÐµÑпÑблÑки"];
alert(name1); // ЮлÑй
alert(name2); // ЦезаÑ
// ÐнÑÑ Ð¿ÑнкÑи нÑде не пÑиÑвоÑнÑ
ЯкÑо ми Ñ
оÑемо Ñакож зÑбÑаÑи вÑе наÑÑÑпне â ми можемо додаÑи Ñе один паÑамеÑÑ, Ñкий оÑÑимÑÑ âÑеÑÑÑâ, викоÑиÑÑовÑÑÑи ÑÑи кÑапки "...":
let [name1, name2, ...rest] = ["ЮлÑй", "ЦезаÑ", "ÐонÑÑл", "РимÑÑÐºÐ¾Ñ Ð ÐµÑпÑблÑки"];
// rest -- Ñе маÑив елеменÑÑв, поÑинаÑÑи з 3-го
alert(rest[0]); // ÐонÑÑл
alert(rest[1]); // РимÑÑÐºÐ¾Ñ Ð ÐµÑпÑблÑки
alert(rest.length); // 2
ÐнаÑÐµÐ½Ð½Ñ rest â Ñе маÑив елеменÑÑв, Ñо залиÑилиÑÑ.
Ðи можемо викоÑиÑÑовÑваÑи бÑдÑ-Ñке ÑнÑе ÑмâÑ Ð·Ð¼ÑÐ½Ð½Ð¾Ñ Ð·Ð°Ð¼ÑÑÑÑ rest, пÑоÑÑо пеÑеконайÑеÑÑ, Ñо воно Ð¼Ð°Ñ ÑÑи кÑапки пеÑед ним Ñ Ð¹Ð´Ðµ оÑÑаннÑм Ñ Ð¿ÑиÑвоÑÐ½Ð½Ñ Ð´ÐµÑÑÑÑкÑÑÑÑваннÑ.
let [name1, name2, ...titles] = ["ЮлÑй", "ЦезаÑ", "ÐонÑÑл", "РимÑÑÐºÐ¾Ñ Ð ÐµÑпÑблÑки"];
// ÑÐµÐ¿ÐµÑ titles = ["ÐонÑÑл", "РимÑÑÐºÐ¾Ñ Ð ÐµÑпÑблÑки"]
Ð¢Ð¸Ð¿Ð¾Ð²Ñ Ð·Ð½Ð°ÑеннÑ
ЯкÑо маÑив коÑоÑÑий за ÑпиÑок змÑÐ½Ð½Ð¸Ñ Ð·Ð»Ñва, помилок не бÑде. ÐÑдÑÑÑÐ½Ñ Ð·Ð½Ð°ÑÐµÐ½Ð½Ñ Ð²Ð²Ð°Ð¶Ð°ÑÑÑÑÑ Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñеними:
let [firstName, surname] = [];
alert(firstName); // undefined
alert(surname); // undefined
ЯкÑо ми Ñ
оÑемо, Ñоб âÑиповеâ знаÑÐµÐ½Ð½Ñ Ð·Ð°Ð¼Ñнило б вÑдÑÑÑнÑ, ми можемо надаÑи його за Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ =:
// Ñипове знаÑеннÑ
let [name = "ÐÑÑÑÑ", surname = "ÐнонÑм"] = ["ЮлÑй"];
alert(name); // ЮлÑй (з маÑивÑ)
alert(surname); // ÐнонÑм (викоÑиÑÑовÑÑÑÑÑÑ Ñипове знаÑеннÑ)
ÐоÑаÑÐºÐ¾Ð²Ñ Ð·Ð½Ð°ÑÐµÐ½Ð½Ñ Ð¼Ð¾Ð¶ÑÑÑ Ð±ÑÑи бÑлÑÑ Ñкладними виÑазами або навÑÑÑ Ð²Ð¸ÐºÐ»Ð¸ÐºÐ°Ð¼Ð¸ ÑÑнкÑÑй. Ðони визнаÑаÑÑÑÑÑ, лиÑе ÑкÑо знаÑÐµÐ½Ð½Ñ Ð½Ðµ надано.
ÐапÑиклад, ÑÑÑ Ð¼Ð¸ викоÑиÑÑовÑÑмо ÑÑнкÑÑÑ prompt Ð´Ð»Ñ Ð´Ð²Ð¾Ñ
ÑиповиÑ
знаÑенÑ:
// запÑÑÐºÐ°Ñ prompt ÑÑлÑки Ð´Ð»Ñ surname
let [name = prompt("Ðм'Ñ?"), surname = prompt('ÐÑÑзвиÑе?')] = ["ЮлÑй"];
alert(name); // ЮлÑй (визнаÑено з маÑивÑ)
alert(surname); // знаÑеннÑ, оÑÑимане з prompt
ÐвеÑнÑÑÑ ÑвагÑ: prompt бÑде ÑпÑаÑÑовÑваÑи лиÑе Ð´Ð»Ñ Ð²ÑдÑÑÑнÑого знаÑÐµÐ½Ð½Ñ (surname).
ÐеÑÑÑÑкÑÑÑÑÐ²Ð°Ð½Ð½Ñ Ð¾Ð±âÑкÑÑв
ÐеÑÑÑÑкÑÑÑоване пÑиÑвоÑÐ½Ð½Ñ Ñакож пÑаÑÑÑ Ð· обâÑкÑами.
ÐÑновний ÑинÑакÑÐ¸Ñ Ñакий:
let {var1, var2} = {var1:â¦, var2:â¦}
Ðи Ð¿Ð¾Ð²Ð¸Ð½Ð½Ñ Ð¼Ð°Ñи ÑÑнÑÑÑий обâÑÐºÑ Ð¿ÑавоÑÑÑ, Ñкий ми Ñ
оÑемо ÑоздÑлиÑи на змÑннÑ. ÐÑва ÑаÑÑина мÑÑÑиÑÑ Ð¾Ð±âÑкÑоподÑбний âÑаблонâ Ð´Ð»Ñ Ð²ÑдповÑдниÑ
влаÑÑивоÑÑей. У найпÑоÑÑÑÑÐ¾Ð¼Ñ Ð²Ð¸Ð¿Ð°Ð´ÐºÑ Ñе ÑпиÑок Ñмен змÑнниÑ
Ñ {...}.
ÐапÑиклад:
let options = {
title: "ÐенÑ",
width: 100,
height: 200
};
let {title, width, height} = options;
alert(title); // ÐенÑ
alert(width); // 100
alert(height); // 200
ÐлаÑÑивоÑÑÑ options.title, options.width Ñа options.height пÑизнаÑÐµÐ½Ñ Ð²ÑдповÑдним змÑнним.
ÐоÑÑдок не Ð¼Ð°Ñ Ð·Ð½Ð°ÑеннÑ. Це Ñеж пÑаÑÑÑ:
// змÑнили поÑÑдок Ñ let {...}
let {height, width, title} = { title: "ÐенÑ", height: 200, width: 100 }
Шаблон з лÑвого Ð±Ð¾ÐºÑ Ð¼Ð¾Ð¶Ðµ бÑÑи бÑлÑÑ Ñкладним Ñ Ð²Ð¸Ð·Ð½Ð°ÑаÑи зÑÑÑÐ°Ð²Ð»ÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑÑивоÑÑей Ñа змÑÐ½Ð½Ð¸Ñ .
ЯкÑо ми Ñ
оÑемо пÑиÑвоÑÑи влаÑÑивÑÑÑÑ Ð·Ð¼ÑннÑй з ÑнÑим Ñменем, напÑиклад, зÑобиÑи Ñак, Ñоб options.width пеÑеÑ
одив до змÑÐ½Ð½Ð¾Ñ Ð· Ð½Ð°Ð·Ð²Ð¾Ñ w, Ñо ми можемо вÑÑановиÑи ÑмâÑ Ð·Ð¼ÑÐ½Ð½Ð¾Ñ Ð·Ð° Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ Ð´Ð²Ð¾ÐºÑапки:
let options = {
title: "ÐенÑ",
width: 100,
height: 200
};
// { sourceProperty: targetVariable }
let {width: w, height: h, title} = options;
// width -> w
// height -> h
// title -> title
alert(title); // ÐенÑ
alert(w); // 100
alert(h); // 200
ÐвокÑапка показÑÑ âÑо: кÑди йдеâ. У Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ð¾Ð¼Ñ Ð²Ð¸Ñе пÑÐ¸ÐºÐ»Ð°Ð´Ñ Ð²Ð»Ð°ÑÑивÑÑÑÑ width пеÑеÑ
одиÑÑ Ñ w, влаÑÑивÑÑÑÑ height пеÑеÑ
одиÑÑ Ñ h, а title пÑиÑвоÑÑÑÑÑÑ ÑÐ¾Ð¼Ñ ÑÐ°Ð¼Ð¾Ð¼Ñ ÑменÑ.
ÐÐ»Ñ Ð¿Ð¾ÑенÑÑйно вÑдÑÑÑнÑÑ
влаÑÑивоÑÑей ми можемо вÑÑановиÑи ÑÐ¸Ð¿Ð¾Ð²Ñ Ð·Ð½Ð°ÑÐµÐ½Ð½Ñ Ð·Ð° Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ "=", напÑиклад:
let options = {
title: "ÐенÑ"
};
let {width = 100, height = 200, title} = options;
alert(title); // ÐенÑ
alert(width); // 100
alert(height); // 200
Так Ñамо, Ñк Ñ Ð· маÑивами або паÑамеÑÑами ÑÑнкÑÑй, ÑÐ¸Ð¿Ð¾Ð²Ñ Ð·Ð½Ð°ÑÐµÐ½Ð½Ñ Ð¼Ð¾Ð¶ÑÑÑ Ð±ÑÑи бÑдÑ-Ñкими виÑазами або навÑÑÑ Ð²Ð¸ÐºÐ»Ð¸ÐºÐ°Ð¼Ð¸ ÑÑнкÑÑй. Ðони бÑдÑÑÑ Ð¾ÑÑненÑ, ÑкÑо знаÑÐµÐ½Ð½Ñ Ð½Ðµ надано.
У ÐºÐ¾Ð´Ñ Ð½Ð¸Ð¶Ñе prompt запиÑÑÑ width, але не title:
let options = {
title: "ÐенÑ"
};
let {width = prompt("ШиÑина?"), title = prompt("Ðаголовок?")} = options;
alert(title); // ÐенÑ
alert(width); // (бÑдÑ-Ñкий ÑезÑлÑÑÐ°Ñ Ð· prompt)
Ðи Ñакож можемо поÑднаÑи двокÑÐ°Ð¿ÐºÑ Ñа ÑÑвнÑÑÑÑ:
let options = {
title: "ÐенÑ"
};
let {width: w = 100, height: h = 200, title} = options;
alert(title); // ÐенÑ
alert(w); // 100
alert(h); // 200
ЯкÑо Ñ Ð½Ð°Ñ Ñ Ñкладний обâÑÐºÑ Ð· багаÑÑма влаÑÑивоÑÑÑми, ми можемо виÑÑгÑи лиÑе Ñе, Ñо нам поÑÑÑбно:
let options = {
title: "ÐенÑ",
width: 100,
height: 200
};
// вибиÑÐ°Ñ ÑÑлÑки title Ñк змÑннÑ
let { title } = options;
alert(title); // ÐенÑ
ÐалиÑок обâÑкÑÑ ââ¦â
Що ÑобиÑи, ÑкÑо обâÑÐºÑ Ð¼Ð°Ñ Ð±ÑлÑÑе влаÑÑивоÑÑей, нÑж ми маÑмо змÑÐ½Ð½Ð¸Ñ ? Чи можемо ми взÑÑи ÑаÑÑинÑ, а поÑÑм пÑизнаÑиÑи кÑдиÑÑ Â«Ð·Ð°Ð»Ð¸Ñок»?
Ðи можемо викоÑиÑÑовÑваÑи Ñаблон залиÑкового опеÑаÑоÑÑ, Ñак Ñамо, Ñк ми Ñобили з маÑивами. ÐÑн не пÑдÑÑимÑÑÑÑÑÑ Ð´ÐµÑкими ÑÑаÑÑÑими бÑаÑзеÑами (IE, викоÑиÑÑовÑйÑе Babel Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÑлÑ), але пÑаÑÑÑ Ð² ÑÑÑаÑÐ½Ð¸Ñ .
Це виглÑÐ´Ð°Ñ Ð½Ð°ÑÑÑпним Ñином:
let options = {
title: "ÐенÑ",
height: 200,
width: 100
};
// title = влаÑÑивÑÑÑÑ Ð· Ð½Ð°Ð·Ð²Ð¾Ñ title
// rest = обâÑÐºÑ Ð· залиÑковими влаÑÑивоÑÑÑми
let {title, ...rest} = options;
// ÑÐµÐ¿ÐµÑ title="ÐенÑ", rest={height: 200, width: 100}
alert(rest.height); // 200
alert(rest.width); // 100
let вÑдÑÑÑнÑйУ наведениÑ
виÑе пÑикладаÑ
змÑÐ½Ð½Ñ Ð±Ñли оголоÑÐµÐ½Ñ Ð¿ÑÑмо в пÑиÑвоÑннÑ: let {â¦} = {â¦}. ÐвиÑайно, ми Ñакож можемо викоÑиÑÑовÑваÑи ÑÑнÑÑÑÑ Ð·Ð¼ÑÐ½Ð½Ñ Ð±ÐµÐ· let. Ðле ÑÑÑ Ð¼Ð¾Ð¶Ðµ бÑÑи пÑдÑÑÑп.
Це не ÑпÑаÑÑÑ:
let title, width, height;
// помилка в ÑÑÐ¾Ð¼Ñ ÑÑдкÑ
{title, width, height} = {title: "ÐенÑ", width: 200, height: 100};
ÐÑоблема в ÑомÑ, Ñо JavaScript ÑозглÑÐ´Ð°Ñ {...} в оÑÐ½Ð¾Ð²Ð½Ð¾Ð¼Ñ Ð¿Ð¾ÑоÑÑ ÐºÐ¾Ð´Ñ (а не вÑеÑÐµÐ´Ð¸Ð½Ñ ÑнÑого виÑазÑ) Ñк блок кодÑ. Ð¢Ð°ÐºÑ Ð±Ð»Ð¾ÐºÐ¸ ÐºÐ¾Ð´Ñ Ð¼Ð¾Ð¶Ð½Ð° викоÑиÑÑовÑваÑи Ð´Ð»Ñ Ð³ÑÑпÑÐ²Ð°Ð½Ð½Ñ Ð¾Ð¿ÐµÑаÑоÑÑв, напÑиклад:
{
// блок кодÑ
let message = "ÐÑивÑÑ";
// ...
alert( message );
}
ÐÑже, ÑÑÑ JavaScript пÑипÑÑкаÑ, Ñо Ñ Ð½Ð°Ñ Ñ Ð±Ð»Ð¾Ðº кодÑ, ÑÐ¾Ð¼Ñ Ñ Ð²Ð¸Ð½Ð¸ÐºÐ°Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°. ÐаÑомÑÑÑÑ Ð¼Ð¸ Ñ Ð¾Ñемо деÑÑÑÑкÑÑÑÑваннÑ.
Щоб показаÑи JavaScript, Ñо Ñе не блок кодÑ, ми можемо загоÑнÑÑи виÑаз Ñ Ð´Ñжки (...):
let title, width, height;
// ÑÐµÐ¿ÐµÑ Ð¿ÑаÑÑÑ
({title, width, height} = {title: "Menu", width: 200, height: 100});
alert( title ); // ÐенÑ
Ðкладене деÑÑÑÑкÑÑÑÑваннÑ
ЯкÑо обâÑÐºÑ Ð°Ð±Ð¾ маÑив мÑÑÑÑÑÑ ÑнÑÑ Ð²ÐºÐ»Ð°Ð´ÐµÐ½Ñ Ð¾Ð±âÑкÑи Ñа маÑиви, ми можемо викоÑиÑÑовÑваÑи ÑкладнÑÑÑ Ñаблони з лÑвого Ð±Ð¾ÐºÑ Ð´Ð»Ñ Ð²Ð¸Ð»ÑÑÐµÐ½Ð½Ñ Ð³Ð»Ð¸Ð±ÑÐ¸Ñ ÑаÑÑин.
У Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ð¾Ð¼Ñ Ð½Ð¸Ð¶Ñе ÐºÐ¾Ð´Ñ options мÑÑÑиÑÑ ÑнÑий обâÑÐºÑ Ñ Ð²Ð»Ð°ÑÑивоÑÑÑ size Ñа маÑив Ñ Ð²Ð»Ð°ÑÑивоÑÑÑ items. Шаблон Ñ Ð»ÑвÑй ÑаÑÑÐ¸Ð½Ñ Ð¿ÑиÑвоÑÐ½Ð½Ñ Ð¼Ð°Ñ ÑÑ ÑÐ°Ð¼Ñ ÑÑÑÑкÑÑÑÑ Ð´Ð»Ñ Ð²Ð¸Ð»ÑÑÐµÐ½Ð½Ñ Ð· ниÑ
знаÑенÑ:
let options = {
size: {
width: 100,
height: 200
},
items: ["ТоÑÑ", "ÐонÑик"],
extra: true
};
// деÑÑÑÑкÑÑÑÑÐ²Ð°Ð½Ð½Ñ ÑозподÑлене на кÑлÑка ÑÑдкÑв Ð´Ð»Ñ Ð½Ð°Ð¾ÑноÑÑÑ
let {
size: { // помÑÑÑимо ÑÑÑ size
width,
height
},
items: [item1, item2], // ÑÑÑ Ð¿ÑизнаÑимо items
title = "ÐенÑ" // Ð½ÐµÐ¼Ð°Ñ Ð² обâÑкÑÑ (викоÑиÑÑовÑÑÑÑÑÑ Ñипове знаÑеннÑ)
} = options;
alert(title); // ÐенÑ
alert(width); // 100
alert(height); // 200
alert(item1); // ТоÑÑ
alert(item2); // ÐонÑик
УÑÑ Ð²Ð»Ð°ÑÑивоÑÑÑ Ð¾Ð±âÑкÑа options, окÑÑм extra, Ñке вÑдÑÑÑÐ½Ñ Ñ Ð»ÑвÑй ÑаÑÑинÑ, пÑизнаÑаÑÑÑÑÑ Ð²ÑдповÑдним змÑнним:
ÐаÑеÑÑÑ, ми маÑмо width, height, item1, item2 Ñа title з Ñиповим знаÑеннÑм.
ÐаÑважÑе, Ñо Ð´Ð»Ñ size Ñа items Ð½ÐµÐ¼Ð°Ñ Ð·Ð¼ÑнниÑ
, оÑкÑлÑки ми беÑемо ÑÑ
вмÑÑÑ.
РозÑÐ¼Ð½Ñ Ð¿Ð°ÑамеÑÑи ÑÑнкÑÑÑ
ÐÑваÑÑÑ Ð²Ð¸Ð¿Ð°Ð´ÐºÐ¸, коли ÑÑнкÑÑÑ Ð¼Ð°Ñ Ð±Ð°Ð³Ð°Ñо паÑамеÑÑÑв, бÑлÑÑÑÑÑÑ Ð· ÑÐºÐ¸Ñ Ñ Ð½ÐµÐ¾Ð±Ð¾Ð²âÑзковими. ÐÑобливо Ñе ÑÑоÑÑÑÑÑÑÑ ÐºÐ¾ÑиÑÑÑваÑÑÐºÐ¸Ñ ÑнÑеÑÑейÑÑв. УÑвÑÑÑ ÑÐ¾Ð±Ñ ÑÑнкÑÑÑ, Ñка ÑÑвоÑÑÑ Ð¼ÐµÐ½Ñ. Ðона може маÑи ÑиÑинÑ, виÑоÑÑ, назвÑ, ÑпиÑок елеменÑÑв ÑоÑо.
ÐижÑе наведено поганий ÑпоÑÑб напиÑаÑи ÑÐ°ÐºÑ ÑÑнкÑÑÑ:
function showMenu(title = "Untitled", width = 200, height = 100, items = []) {
// ...
}
У ÑеалÑÐ½Ð¾Ð¼Ñ Ð¶Ð¸ÑÑÑ Ð¿Ñоблема полÑÐ³Ð°Ñ Ð² ÑомÑ, Ñк запамâÑÑаÑи поÑÑдок аÑгÑменÑÑв. ÐазвиÑай IDE намагаÑÑÑÑÑ Ð½Ð°Ð¼ допомогÑи, оÑобливо ÑкÑо код добÑе задокÑменÑований, але вÑе ж⦠ÐнÑа пÑоблема полÑÐ³Ð°Ñ Ð² ÑомÑ, Ñк викликаÑи ÑÑнкÑÑÑ, коли бÑлÑÑÑÑÑÑ Ð¿Ð°ÑамеÑÑÑв Ñипово в поÑÑдкÑ.
Ðожливо Ñак?
// undefined де пÑдÑ
одÑÑÑ ÑÐ¸Ð¿Ð¾Ð²Ñ Ð·Ð½Ð°ÑеннÑ
showMenu("My Menu", undefined, undefined, ["Item1", "Item2"])
Це негаÑно. Ð ÑÑÐ°Ñ Ð½ÐµÑиÑабелÑним, коли ми маÑмо ÑпÑÐ°Ð²Ñ Ð· бÑлÑÑÐ¾Ñ ÐºÑлÑкÑÑÑÑ Ð¿Ð°ÑамеÑÑÑв.
Ðа Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ñ Ð¿ÑÐ¸Ñ Ð¾Ð´Ð¸ÑÑ Ð´ÐµÑÑÑÑкÑÑÑÑваннÑ!
Ðи можемо пеÑедаÑи паÑамеÑÑи Ñк обâÑкÑ, Ñ ÑÑнкÑÑÑ Ð½ÐµÐ³Ð°Ð¹Ð½Ð¾ деÑÑÑÑкÑÑÑÑÑ ÑÑ Ð½Ð° змÑннÑ:
// ми пеÑедаÑмо обâÑÐºÑ Ð´Ð¾ ÑÑнкÑÑÑ
let options = {
title: "My menu",
items: ["Item1", "Item2"]
};
// ...Ñ Ð²Ð¾Ð½Ð° негайно ÑозгоÑÑÐ°Ñ Ð¹Ð¾Ð³Ð¾ до змÑнниÑ
function showMenu({title = "Untitled", width = 200, height = 100, items = []}) {
// title, items â взÑÑÑ Ð· options,
// width, height â викоÑиÑÑовÑÑÑÑÑÑ ÑÐ¸Ð¿Ð¾Ð²Ñ Ð·Ð½Ð°ÑеннÑ
alert( `${title} ${width} ${height}` ); // My Menu 200 100
alert( items ); // Item1, Item2
}
showMenu(options);
Ðи Ñакож можемо викоÑиÑÑовÑваÑи бÑлÑÑ Ñкладне деÑÑÑÑкÑÑÑÑÐ²Ð°Ð½Ð½Ñ Ð· вкладеними обâÑкÑами Ñа двокÑапками:
let options = {
title: "My menu",
items: ["Item1", "Item2"]
};
function showMenu({
title = "Untitled",
width: w = 100, // width ÑÑÐ°Ñ w
height: h = 200, // height ÑÑÐ°Ñ h
items: [item1, item2] // пеÑÑий ÐµÐ»ÐµÐ¼ÐµÐ½Ñ items йде до item1, дÑÑгий - до item2
}) {
alert( `${title} ${w} ${h}` ); // My Menu 100 200
alert( item1 ); // Item1
alert( item2 ); // Item2
}
showMenu(options);
Ðовний ÑинÑакÑÐ¸Ñ Ñакий Ñамий, Ñк Ñ Ð´Ð»Ñ Ð´ÐµÑÑÑÑкÑÑÑованого пÑиÑвоÑннÑ:
function({
incomingProperty: varName = defaultValue
...
})
Ð¢Ð¾Ð´Ñ Ð´Ð»Ñ Ð¾Ð±âÑкÑа паÑамеÑÑÑв бÑде змÑнна varName Ð´Ð»Ñ Ð²Ð»Ð°ÑÑивоÑÑÑ incomingProperty з Ñиповим знаÑеннÑм defaultValue.
ÐвеÑнÑÑÑ ÑвагÑ, Ñо Ñаке деÑÑÑÑкÑÑÑÑÐ²Ð°Ð½Ð½Ñ Ð¿ÐµÑедбаÑаÑ, Ñо showMenu() Ð¼Ð°Ñ Ð°ÑгÑменÑ. ЯкÑо ми Ñ
оÑемо, Ñоб ÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð½Ñ Ð±Ñли Ñиповими, ми Ð¿Ð¾Ð²Ð¸Ð½Ð½Ñ Ð²ÐºÐ°Ð·Ð°Ñи поÑожнÑй обâÑкÑ:
showMenu({}); // Ñак добÑе, ÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð½Ñ ÑиповÑ
showMenu(); // Ñе даÑÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÑ
Ðи можемо випÑавиÑи Ñе, зÑобивÑи {} Ñиповим знаÑеннÑм Ð´Ð»Ñ Ð²ÑÑого обâÑкÑа паÑамеÑÑÑв:
function showMenu({ title = "Menu", width = 100, height = 200 } = {}) {
alert( `${title} ${width} ${height}` );
}
showMenu(); // Menu 100 200
У Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ð¾Ð¼Ñ Ð²Ð¸Ñе ÐºÐ¾Ð´Ñ Ð²ÐµÑÑ Ð¾Ð±âÑÐºÑ Ð°ÑгÑменÑÑв Ñ Ñиповим знаÑеннÑм {}, ÑÐ¾Ð¼Ñ Ð·Ð°Ð²Ð¶Ð´Ð¸ Ñ Ñо деÑÑÑÑкÑÑÑÑваÑи.
ÐÑдÑÑмки
-
ÐеÑÑÑÑкÑÑÑоване пÑиÑвоÑÐ½Ð½Ñ Ð´Ð¾Ð·Ð²Ð¾Ð»ÑÑ Ð¼Ð¸ÑÑÑво зÑÑÑавиÑи обâÑÐºÑ Ð°Ð±Ð¾ маÑив з багаÑÑма змÑнними.
-
Ðовний ÑинÑакÑÐ¸Ñ Ð´Ð»Ñ Ð¾Ð±âÑкÑа:
let {prop : varName = default, ...rest} = objectЦе ознаÑаÑ, Ñо влаÑÑивÑÑÑÑ
propÐ¼Ð°Ñ Ð²Ñ Ð¾Ð´Ð¸Ñи до змÑнноÑvarNameÑ, ÑкÑо ÑÐ°ÐºÐ¾Ñ Ð²Ð»Ð°ÑÑивоÑÑÑ Ð½Ðµ ÑÑнÑÑ, ÑлÑд викоÑиÑÑовÑваÑиÑиповезнаÑеннÑ.ÐлаÑÑивоÑÑÑ Ð¾Ð±âÑкÑа, ÑÐºÑ Ð½Ðµ маÑÑÑ Ð·ÑÑÑавленнÑ, копÑÑÑÑÑÑÑ Ð² обâÑкÑ
rest. -
Ðовний ÑинÑакÑÐ¸Ñ Ð´Ð»Ñ Ð¼Ð°ÑивÑ:
let [item1 = default, item2, ...rest] = arrayÐеÑÑий ÐµÐ»ÐµÐ¼ÐµÐ½Ñ Ð¿ÐµÑÐµÑ Ð¾Ð´Ð¸ÑÑ Ð´Ð¾
item1; дÑÑгий пеÑÐµÑ Ð¾Ð´Ð¸ÑÑ Ð´Ð¾item2, ÑÑÑ ÑнÑÑ ÑÑвоÑÑÑÑÑ Ð¼Ð°Ñивrest. -
Ðожна виÑÑгÑваÑи Ð´Ð°Ð½Ñ Ð· Ð²ÐºÐ»Ð°Ð´ÐµÐ½Ð¸Ñ Ð¼Ð°ÑивÑв/обâÑкÑÑв, Ð´Ð»Ñ ÑÑого лÑва ÑÑоÑона повинна маÑи ÑÑ Ð¶ ÑÑÑÑкÑÑÑÑ, Ñо й пÑава.
ÐоменÑаÑÑ
<code>, Ð´Ð»Ñ ÐºÑлÑÐºÐ¾Ñ ÑÑдкÑв â обгоÑнÑÑÑ ÑÑ Ñегом<pre>, Ð´Ð»Ñ Ð¿Ð¾Ð½Ð°Ð´ 10 ÑÑдкÑв â викоÑиÑÑовÑйÑе пÑÑоÑниÑÑ (plnkr, jsbin, codepenâ¦)