Як ми знаÑмо з глави Типи Ð´Ð°Ð½Ð¸Ñ , Ñ JavaScript Ñ Ð²ÑÑÑм ÑипÑв Ð´Ð°Ð½Ð¸Ñ . СÑм з Ð½Ð¸Ñ Ð½Ð°Ð·Ð¸Ð²Ð°ÑÑÑÑÑ âпÑимÑÑивнимиâ, оÑкÑлÑки ÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð½Ñ Ð¼ÑÑÑÑÑÑ Ð»Ð¸Ñе Ð¾Ð´Ð½Ñ ÑÑÑ (Ñи Ñо ÑÑдок, ÑиÑло Ñи ÑоÑÑ ÑнÑе).
Ðа пÑоÑÐ¸Ð²Ð°Ð³Ñ ÑÑомÑ, обâÑкÑи викоÑиÑÑовÑÑÑÑÑÑ Ð´Ð»Ñ Ð·Ð±ÐµÑÑÐ³Ð°Ð½Ð½Ñ ÐºÐ»ÑÑÑв ÑÑÐ·Ð½Ð¸Ñ ÐºÐ¾Ð»ÐµÐºÑÑй Ð´Ð°Ð½Ð¸Ñ Ñа ÑкладнÑÑÐ¸Ñ Ð¾Ð±âÑкÑÑв. У JavaScript обâÑкÑи пÑоникаÑÑÑ Ð¼Ð°Ð¹Ð¶Ðµ в ÑÑÑ Ð°ÑпекÑи мови. Ð¢Ð¾Ð¼Ñ Ð¼Ð¸ Ð¿Ð¾Ð²Ð¸Ð½Ð½Ñ ÑÑ ÑпоÑаÑÐºÑ Ð·ÑозÑмÑÑи, пеÑÑ Ð½Ñж заглиблÑваÑиÑÑ Ð² ÑкладнÑÑÑ Ñеми.
ÐбâÑÐºÑ Ð¼Ð¾Ð¶Ð½Ð° ÑÑвоÑиÑи за Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ ÑÑгÑÑниÑ
дÑжок {â¦} з необовâÑзковим ÑпиÑком влаÑÑивоÑÑей. ÐлаÑÑивÑÑÑÑ â Ñе паÑа âклÑÑ: знаÑеннÑâ, де клÑÑ â Ñе ÑÑдок (Ñакож називаÑÑÑÑÑ âÑмâÑ Ð²Ð»Ð°ÑÑивоÑÑÑâ), а знаÑÐµÐ½Ð½Ñ Ð¼Ð¾Ð¶Ðµ бÑÑи бÑдÑ-Ñким.
Ðи можемо ÑÑвиÑи ÑÐ¾Ð±Ñ Ð¾Ð±âÑÐºÑ Ñк ÑаÑÑ Ð· пÑдпиÑаними Ñайлами. Ðожен ÑÑÐ°Ð³Ð¼ÐµÐ½Ñ Ð´Ð°Ð½Ð¸Ñ Ð·Ð±ÐµÑÑгаÑÑÑÑÑ Ñ ÑвоÑÐ¼Ñ ÑÐ°Ð¹Ð»Ñ Ð·Ð° Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ ÐºÐ»ÑÑа. Ðегко знайÑи Ñайл за Ð½Ð°Ð·Ð²Ð¾Ñ Ð°Ð±Ð¾ додаÑи/видалиÑи Ñайл.
ÐоÑожнÑй обâÑÐºÑ (âпоÑÐ¾Ð¶Ð½Ñ ÑаÑÑâ) можна ÑÑвоÑиÑи за Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ з Ð´Ð²Ð¾Ñ ÑинÑакÑиÑÑв:
let user = new Object(); // ÑинÑакÑÐ¸Ñ "конÑÑÑÑкÑоÑа обâÑкÑÑв"
let user = {}; // ÑинÑакÑÐ¸Ñ "лÑÑеÑÐ°Ð»Ñ Ð¾Ð±âÑкÑа"
ÐазвиÑай викоÑиÑÑовÑÑÑÑÑÑ ÑÑгÑÑÐ½Ñ Ð´Ñжки {...}. Таке оголоÑÐµÐ½Ð½Ñ Ð½Ð°Ð·Ð¸Ð²Ð°ÑÑÑÑÑ Ð»ÑÑеÑалом обâÑкÑа.
ÐÑÑеÑали Ñа влаÑÑивоÑÑÑ
Ðи можемо одÑÐ°Ð·Ñ Ð¿Ð¾Ð¼ÑÑÑиÑи деÑÐºÑ Ð²Ð»Ð°ÑÑивоÑÑÑ Ñ {...} Ñк паÑи âклÑÑ: знаÑеннÑâ:
let user = { // обâÑкÑ
name: "Ðван", // за клÑÑем "name" збеÑÑгаÑмо знаÑÐµÐ½Ð½Ñ "Ðван"
age: 30 // за клÑÑем "age" збеÑÑгаÑи знаÑÐµÐ½Ð½Ñ "30"
};
ÐлаÑÑивÑÑÑÑ Ð¼Ð°Ñ ÐºÐ»ÑÑ (Ñакож вÑдомий Ñк âÑмâÑâ або âÑденÑиÑÑкаÑоÑâ) пеÑед двокÑÐ°Ð¿ÐºÐ¾Ñ ":" Ñ Ð·Ð½Ð°ÑÐµÐ½Ð½Ñ Ð¿ÑавоÑÑÑ Ð²Ñд нÑого.
РобâÑкÑÑ user заÑаз знаÑ
одÑÑÑÑÑ Ð´Ð²Ñ Ð²Ð»Ð°ÑÑивоÑÑÑ:
- ÐеÑÑа влаÑÑивÑÑÑÑ Ð· ÑмâÑм
"name"Ñ Ð·Ð½Ð°ÑеннÑм"Ðван". - ÐÑÑга влаÑÑивÑÑÑÑ Ð· ÑмâÑм
"age"Ñ Ð·Ð½Ð°ÑеннÑм30.
ÐÑÑиманий обâÑÐºÑ user можна ÑÑвиÑи ÑÐ¾Ð±Ñ Ñк ÑаÑÑ Ð· двома пÑдпиÑаними Ñайлами з познаÑками ânameâ Ñа âageâ.
Ðи можемо в бÑдÑ-Ñкий Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð´Ð¾Ð´Ð°Ñи в нÑого Ð½Ð¾Ð²Ñ Ñайли, видалиÑи Ñайли або пÑоÑиÑаÑи вмÑÑÑ Ð±ÑдÑ-Ñкого ÑайлÑ.
ÐÐ»Ñ Ð·Ð²ÐµÑÐ½ÐµÐ½Ð½Ñ Ð´Ð¾ влаÑÑивоÑÑей викоÑиÑÑовÑÑÑÑÑÑ Ð·Ð°Ð¿Ð¸Ñ ÑеÑез кÑапкÑ:
// оÑÑимаÑмо знаÑÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑÑивоÑÑей обâÑкÑа:
alert( user.name ); // Ðван
alert( user.age ); // 30
ÐнаÑÐµÐ½Ð½Ñ Ð¼Ð¾Ð¶Ðµ бÑÑи бÑдÑ-Ñкого ÑипÑ. Ðодамо бÑлеве знаÑеннÑ:
user.isAdmin = true;
Щоб видалиÑи влаÑÑивÑÑÑÑ Ð¼Ð¸ можемо викоÑиÑÑаÑи опеÑаÑÐ¾Ñ delete:
delete user.age;
ÐмâÑ Ð²Ð»Ð°ÑÑивоÑÑÑ Ð¼Ð¾Ð¶Ðµ ÑкладаÑиÑÑ Ð· декÑлÑÐºÐ¾Ñ ÑлÑв, але ÑÐ¾Ð´Ñ Ð²Ð¾Ð½Ð¾ Ð¼Ð°Ñ Ð±ÑÑи помÑÑено в лапки:
let user = {
name: "Ðван",
age: 30,
"likes birds": true // ÐмâÑ Ð²Ð»Ð°ÑÑивоÑÑÑ Ð· декÑлÑкоÑ
ÑлÑв повинно бÑÑи в лапкаÑ
};
ÐÑÑÐ°Ð½Ð½Ñ Ð²Ð»Ð°ÑÑивÑÑÑÑ Ñ ÑпиÑÐºÑ Ð¼Ð¾Ð¶Ðµ закÑнÑÑваÑиÑÑ ÐºÐ¾Ð¼Ð¾Ñ:
let user = {
name: "Ðван",
age: 30,
}
Це називаÑÑÑÑÑ âкÑнÑевоÑâ або âвиÑÑÑоÑâ комоÑ. Ðона полегÑÑÑ Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ/видаленнÑ/пеÑемÑÑÐµÐ½Ð½Ñ Ð¿Ð¾ влаÑÑивоÑÑÑÑ , оÑкÑлÑки вÑÑ ÑÑдки ÑÑаÑÑÑ Ð¾Ð´Ð½Ð°ÐºÐ¾Ð²Ð¸Ð¼Ð¸.
ÐвадÑаÑÐ½Ñ Ð´Ñжки
ÐÐ»Ñ Ð²Ð»Ð°ÑÑивоÑÑей, Ñмена ÑÐºÐ¸Ñ ÑкладаÑÑÑÑÑ Ð· декÑлÑÐºÐ¾Ñ ÑлÑв, доÑÑÑп до знаÑÐµÐ½Ð½Ñ Â«ÑеÑез кÑапкÑ» не пÑаÑÑÑ:
// Ñе виклиÑе ÑинÑакÑиÑÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÑ
user.likes birds = true
JavaScript баÑиÑÑ, Ñо ми звеÑÑаÑмоÑÑ Ð´Ð¾ влаÑÑивоÑÑÑ user.likes, а поÑÑм йде незÑозÑмÑле Ñлово birds. Ð ÑезÑлÑÑаÑÑ Ð¾ÑÑимаÑмо ÑинÑакÑиÑÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÑ.
ÐÑапка вимагаÑ, Ñоб клÑÑ Ð±Ñв пÑавилÑним ÑденÑиÑÑкаÑоÑом змÑнноÑ. Це ознаÑаÑ: не мÑÑÑиÑÑ Ð¿ÑобÑлÑв, не поÑинаÑÑÑÑÑ Ð· ÑиÑÑи Ñа не мÑÑÑиÑÑ ÑпеÑÑалÑниÑ
ÑимволÑв ($ Ñа _ дозволенÑ).
ÐÐ»Ñ ÑÐ°ÐºÐ¸Ñ Ð²Ð¸Ð¿Ð°Ð´ÐºÑв ÑÑнÑÑ Ð°Ð»ÑÑеÑнаÑивний ÑпоÑÑб доÑÑÑÐ¿Ñ Ð´Ð¾ влаÑÑивоÑÑей ÑеÑез квадÑаÑÐ½Ñ Ð´Ñжки. Такий ÑпоÑÑб ÑпÑаÑÑÑ Ð· бÑдÑ-Ñким ÑмâÑм влаÑÑивоÑÑÑ:
let user = {};
// пÑиÑвоÑÐ²Ð°Ð½Ð½Ñ Ð·Ð½Ð°ÑÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑÑивоÑÑÑ
user["лÑбиÑÑ Ð¿ÑаÑ
Ñв"] = true;
// оÑÑÐ¸Ð¼Ð°Ð½Ð½Ñ Ð·Ð½Ð°ÑÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑÑивоÑÑÑ
alert(user["лÑбиÑÑ Ð¿ÑаÑ
Ñв"]); // true
// Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑÑивоÑÑÑ
delete user["лÑбиÑÑ Ð¿ÑаÑ
Ñв"];
ÐаÑаз ÑÑе гаÑазд. ÐвеÑнÑÑÑ ÑвагÑ, Ñо ÑÑдок Ñ ÐºÐ²Ð°Ð´ÑаÑÐ½Ð¸Ñ Ð´ÑÐ¶ÐºÐ°Ñ Ð¼ÑÑÑиÑÑÑÑ Ð² Ð»Ð°Ð¿ÐºÐ°Ñ (пÑдÑйде бÑдÑ-Ñкий Ñип лапок).
ÐвадÑаÑÐ½Ñ Ð´Ñжки Ñакож дозволÑÑÑÑ Ð·Ð²ÐµÑнÑÑиÑÑ Ð´Ð¾ влаÑÑивоÑÑÑ, ÑмâÑ ÑÐºÐ¾Ñ Ð¼Ð¾Ð¶Ðµ бÑÑи ÑезÑлÑÑаÑом виÑазÑ. ÐапÑиклад, ÑмâÑ Ð²Ð»Ð°ÑÑивоÑÑÑ Ð¼Ð¾Ð¶Ðµ збеÑÑгаÑиÑÑ Ð² змÑннÑй:
let key = "лÑбиÑÑ Ð¿ÑаÑ
Ñв";
// Ñак Ñамо, Ñк user["лÑбиÑÑ Ð¿ÑаÑ
Ñв"] = true;
user[key] = true;
ТÑÑ Ð·Ð¼Ñнна key може бÑÑи обÑиÑлена пÑд ÑÐ°Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð°Ð±Ð¾ залежаÑиме вÑд Ð²Ð²Ð¾Ð´Ñ ÐºÐ¾ÑиÑÑÑваÑа. Ð ÑÐ¾Ð´Ñ Ð¼Ð¸ викоÑиÑÑовÑÑмо його Ð´Ð»Ñ Ð´Ð¾ÑÑÑÐ¿Ñ Ð´Ð¾ влаÑÑивоÑÑÑ. Це Ð´Ð°Ñ Ð½Ð°Ð¼ Ð²ÐµÐ»Ð¸ÐºÑ Ð³Ð½ÑÑкÑÑÑÑ.
ÐÑиклад:
let user = {
name: "Ðван",
age: 30
};
let key = prompt("Що ви Ñ
оÑеÑе знаÑи пÑо коÑиÑÑÑваÑа?", "name");
// доÑÑÑп до влаÑÑивоÑÑÑ ÑеÑез змÑннÑ
alert( user[key] ); // Ðван (ÑкÑо ввеÑÑи "name")
ÐÐ°Ð¿Ð¸Ñ Â«ÑеÑез кÑапкÑ» Ñакого не дозволÑÑ:
let user = {
name: "Ðван",
age: 30
};
let key = "name";
alert( user.key ) // undefined
ÐбÑиÑлÑÐ²Ð°Ð½Ñ Ð²Ð»Ð°ÑÑивоÑÑÑ
Ðи можемо викоÑиÑÑовÑваÑи квадÑаÑÐ½Ñ Ð´Ñжки в лÑÑеÑалÑнÑй ноÑаÑÑÑ Ð´Ð»Ñ ÑÑвоÑÐµÐ½Ð½Ñ Ð¾Ð±ÑиÑлÑÐ²Ð°Ð½Ð¾Ñ Ð²Ð»Ð°ÑÑивоÑÑÑ.
ÐапÑиклад:
let fruit = prompt("Ð¯ÐºÑ ÑÑÑкÑи кÑпиÑи?", "apple");
let bag = {
[fruit]: 5, // Ð½Ð°Ð·Ð²Ñ Ð²Ð»Ð°ÑÑивоÑÑÑ Ð²Ð·ÑÑо Ð·Ñ Ð·Ð¼ÑÐ½Ð½Ð¾Ñ fruit
};
alert( bag.apple ); // 5 ÑкÑо fruit="apple"
ÐнаÑÐµÐ½Ð½Ñ Ð¾Ð±ÑиÑлÑÐ²Ð°Ð½Ð¾Ñ Ð²Ð»Ð°ÑÑивоÑÑÑ Ð¿ÑоÑÑе: [fruit] ознаÑаÑ, Ñо Ð½Ð°Ð·Ð²Ñ Ð²Ð»Ð°ÑÑивоÑÑÑ ÑлÑд бÑаÑи з fruit.
Ð ÑкÑо вÑдвÑдÑÐ²Ð°Ñ Ð²Ð²ÐµÐ´Ðµ Ñлово "apple", Ñо в обâÑкÑÑ bag ÑÐµÐ¿ÐµÑ Ð±Ñде лежаÑи влаÑÑивÑÑÑÑ {apple: 5}.
Ðо ÑÑÑÑ, Ñе пÑаÑÑÑ Ñак Ñамо Ñк:
let fruit = prompt("Ð¯ÐºÑ ÑÑÑкÑи кÑпиÑи?", "apple");
let bag = {};
// Ð½Ð°Ð·Ð²Ñ Ð²Ð»Ð°ÑÑивоÑÑÑ Ð²Ð·ÑÑо Ð·Ñ Ð·Ð¼ÑÐ½Ð½Ð¾Ñ fruit
bag[fruit] = 5;
⦠Ðле виглÑÐ´Ð°Ñ Ð¿ÑиÑмнÑÑе.
Ðи можемо викоÑиÑÑаÑи ÑкладнÑÑÑ Ð²Ð¸Ñази Ñ ÐºÐ²Ð°Ð´ÑаÑÐ½Ð¸Ñ Ð´ÑÐ¶ÐºÐ°Ñ :
let fruit = 'apple';
let bag = {
[fruit + 'Computers']: 5 // bag.appleComputers = 5
};
ÐвадÑаÑÐ½Ñ Ð´Ñжки набагаÑо поÑÑжнÑÑÑ Ð·Ð° кÑÐ°Ð¿ÐºÐ¾Ð²Ñ Ð½Ð¾ÑаÑÑÑ. Ðони допÑÑкаÑÑÑ Ð±ÑдÑ-ÑÐºÑ Ð½Ð°Ð·Ð²Ð¸ влаÑÑивоÑÑей Ñа змÑннÑ. Ðле вони Ñакож бÑлÑÑ Ð³ÑомÑÐ·Ð´ÐºÑ Ð´Ð»Ñ Ð½Ð°Ð¿Ð¸ÑаннÑ.
Ð¢Ð¾Ð¼Ñ Ð±ÑлÑÑÑÑÑÑ ÑаÑÑ, коли назви влаÑÑивоÑÑей вÑÐ´Ð¾Ð¼Ñ Ñа пÑоÑÑÑ, викоÑиÑÑовÑÑÑÑÑÑ ÐºÑапка. Ð ÑкÑо нам поÑÑÑбно ÑоÑÑ ÑкладнÑÑе, Ñо пеÑÐµÑ Ð¾Ð´Ð¸Ð¼Ð¾ до квадÑаÑÐ½Ð¸Ñ Ð´Ñжок.
СкоÑоÑений Ð·Ð°Ð¿Ð¸Ñ Ð²Ð»Ð°ÑÑивоÑÑÑ Ð·Ñ Ð·Ð¼ÑÐ½Ð½Ð¾Ñ (Property value shorthand)
У ÑеалÑÐ½Ð¾Ð¼Ñ ÐºÐ¾Ð´Ñ Ð¼Ð¸ ÑаÑÑо викоÑиÑÑовÑÑмо наÑÐ²Ð½Ñ Ð·Ð¼ÑÐ½Ð½Ñ Ñк знаÑÐµÐ½Ð½Ñ Ð´Ð»Ñ Ñмен влаÑÑивоÑÑей.
ÐÑиклад:
function makeUser(name, age) {
return {
name: name,
age: age,
// ...ÑнÑÑ Ð²Ð»Ð°ÑÑивоÑÑÑ
};
}
let user = makeUser("Ðван", 30);
alert(user.name); // Ðван
Ð Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ð¾Ð¼Ñ Ð²Ð¸Ñе пÑÐ¸ÐºÐ»Ð°Ð´Ñ Ð½Ð°Ð·Ð²Ð° влаÑÑивоÑÑей name Ñ age збÑгаÑÑÑÑÑ Ð· назвами змÑнниÑ
, ÑÐºÑ Ð¼Ð¸ пÑдÑÑавлÑÑмо Ñк знаÑÐµÐ½Ð½Ñ ÑиÑ
влаÑÑивоÑÑей. Такий пÑдÑ
Ñд наÑÑÑлÑки поÑиÑений, Ñо ÑÑнÑÑ ÑпеÑÑалÑний ÑкоÑоÑений Ð·Ð°Ð¿Ð¸Ñ Ð²Ð»Ð°ÑÑивоÑÑÑ Ð·Ñ Ð·Ð¼ÑÐ½Ð½Ð¾Ñ (property value shorthand) Ð´Ð»Ñ ÑпÑоÑÐµÐ½Ð½Ñ ÑÑого запиÑÑ.
ÐамÑÑÑÑ name: name ми можемо напиÑаÑи пÑоÑÑо name:
function makeUser(name, age) {
return {
name, // Ñе ж Ñаме, Ñо name: name
age, // Ñе ж Ñаме, Ñо age: age
// ...
};
}
Ðи можемо одноÑаÑно в Ð¾Ð´Ð½Ð¾Ð¼Ñ Ð¾Ð±âÑкÑÑ Ð²Ð¸ÐºÐ¾ÑиÑÑовÑваÑи Ñ ÑкоÑоÑеннÑ, Ñ Ð·Ð²Ð¸ÑÐ°Ð¹Ð½Ñ Ð¾Ð±âÑкÑи:
let user = {
name, // Ñе ж Ñаме, Ñо name:name
age: 30
};
ÐÐ±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ñмен влаÑÑивоÑÑей
Як ми вже знаÑмо, змÑнна не може маÑи ÑмâÑ Ð·Ñ ÑпиÑÐºÑ ÑлÑв заÑезеÑÐ²Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¼Ð¾Ð²Ð¾Ñ, ÑÐ°ÐºÐ¸Ñ Ñк âforâ, âletâ, âreturnâ ÑоÑо.
Ðле Ð´Ð»Ñ Ð²Ð»Ð°ÑÑивоÑÑÑ Ð¾Ð±âÑкÑа Ð½ÐµÐ¼Ð°Ñ Ñакого обмеженнÑ:
// ÑÑ Ð½Ð°Ð·Ð²Ð¸ влаÑÑивоÑÑей пÑавилÑнÑ
let obj = {
for: 1,
let: 2,
return: 3
};
alert( obj.for + obj.let + obj.return ); // 6
ÐоÑоÑко кажÑÑи, Ð½ÐµÐ¼Ð°Ñ Ð½ÑÑÐºÐ¸Ñ Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ñ Ñодо назв влаÑÑивоÑÑей. Це можÑÑÑ Ð±ÑÑи бÑдÑ-ÑÐºÑ ÑÑдки або Ñимволи (ÑпеÑÑалÑний Ñип Ð´Ð»Ñ ÑденÑиÑÑкаÑоÑÑв, пÑо ÑÐºÑ Ð±Ñде Ñказано пÑзнÑÑе).
ÐнÑÑ Ñипи авÑомаÑиÑно пеÑеÑвоÑÑÑÑÑÑÑ Ð½Ð° ÑÑдки.
ÐапÑиклад, ÑиÑло 0 ÑÑÐ°Ñ ÑÑдком "0", коли викоÑиÑÑовÑÑÑÑÑÑ Ñк клÑÑ Ð²Ð»Ð°ÑÑивоÑÑÑ:
let obj = {
0: "ÑеÑÑ" // Ñе ж Ñаме, Ñо "0": "ÑеÑÑ"
};
// обидва попеÑÐµÐ´Ð¶ÐµÐ½Ð½Ñ Ð¼Ð°ÑÑÑ Ð´Ð¾ÑÑÑп до однÑÑÑ Ð²Ð»Ð°ÑÑивоÑÑÑ (ÑиÑло 0 пеÑеÑвоÑÑÑÑÑÑÑ Ð½Ð° ÑÑдок "0")
alert( obj["0"] ); // ÑеÑÑ
alert( obj[0] ); // ÑеÑÑ (Ñаж Ñама влаÑÑивÑÑÑÑ)
Рневеликий пÑдводний камÑнÑ, повâÑзаний Ð·Ñ ÑпеÑÑалÑÐ½Ð¾Ñ Ð²Ð»Ð°ÑÑивÑÑÑÑ __proto__. Ðи можемо вÑÑановиÑи в нÑого знаÑÐµÐ½Ð½Ñ Ð¾Ð±âÑкÑного ÑипÑ:
let obj = {};
obj.__proto__ = 5; // пÑиÑвоÑмо ÑиÑло
alert(obj.__proto__); // [object Object] - знаÑÐµÐ½Ð½Ñ Ñ Ð¾Ð±âÑкÑом, ÑобÑо не Ñе, Ñо ми оÑÑкÑвали
Як ми баÑимо з кодÑ, пÑиÑвоÑÐ½Ð½Ñ ÑиÑла 5 ÑгноÑÑÑÑÑÑÑ.
Ðи ÑозглÑнемо оÑобливий Ñ
аÑакÑÐµÑ __proto__ Ñ Ð½Ð°ÑÑÑпниÑ
ÑоздÑлаÑ
Ñ Ð·Ð°Ð¿ÑопонÑÑмо ÑпоÑоби випÑÐ°Ð²Ð»ÐµÐ½Ð½Ñ ÑÐ°ÐºÐ¾Ñ Ð¿Ð¾Ð²ÐµÐ´Ñнки.
ÐеÑевÑÑка ÑÑнÑÐ²Ð°Ð½Ð½Ñ Ð²Ð»Ð°ÑÑивоÑÑÑ, опеÑаÑÐ¾Ñ âinâ
ÐомÑÑÐ½Ð¾Ñ Ð¾ÑобливÑÑÑÑ Ð¾Ð±âÑкÑÑв Ñ JavaScript, Ñ Ð¿Ð¾ÑÑвнÑÐ½Ð½Ñ Ð· багаÑÑма ÑнÑими мовами, Ñ Ð¼Ð¾Ð¶Ð»Ð¸Ð²ÑÑÑÑ Ð´Ð¾ÑÑÑÐ¿Ñ Ð´Ð¾ бÑдÑ-ÑÐºÐ¾Ñ Ð²Ð»Ð°ÑÑивоÑÑÑ. Ðомилки не бÑде, ÑкÑо влаÑÑивоÑÑÑ Ð½Ðµ ÑÑнÑÑ!
СпÑоба пÑоÑиÑаÑи вÑдÑÑÑÐ½Ñ Ð²Ð»Ð°ÑÑивÑÑÑÑ Ð¿ÑоÑÑо повеÑÑÐ°Ñ undefined. Ð¢Ð¾Ð¼Ñ Ð¼Ð¸ можемо легко пеÑевÑÑиÑи, Ñи ÑÑнÑÑ Ð²Ð»Ð°ÑÑивÑÑÑÑ:
let user = {};
alert( user.noSuchProperty === undefined ); // true ознаÑÐ°Ñ "ÑÐ°ÐºÐ¾Ñ Ð²Ð»Ð°ÑÑивоÑÑÑ Ð½ÐµÐ¼Ð°Ñ"
ÐÐ»Ñ ÑÑого Ñакож Ñ ÑпеÑÑалÑний опеÑаÑÐ¾Ñ "in".
СинÑакÑÐ¸Ñ Ñакий:
"key" in object
ÐапÑиклад:
let user = { name: "Ðван", age: 30 };
alert( "age" in user ); // true, user.age ÑÑнÑÑ
alert( "blabla" in user ); // false, user.blabla не ÑÑнÑÑ
ÐвеÑнÑÑÑ ÑвагÑ, Ñо злÑва вÑд опеÑаÑоÑа in повинно бÑÑи ÑмâÑ Ð²Ð»Ð°ÑÑивоÑÑÑ. ÐазвиÑай Ñе ÑÑдок в лапкаÑ
.
ЯкÑо ми опÑÑкаÑмо лапки, Ñе ознаÑаÑ, Ñо ми вказÑÑмо змÑннÑ, в ÑкÑй Ð·Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑÑ ÑмâÑ Ð²Ð»Ð°ÑÑивоÑÑÑ. ÐапÑиклад:
let user = { age: 30 };
let key = "age";
alert( key in user ); // true, влаÑÑивÑÑÑÑ "age" ÑÑнÑÑ
ÐÐ»Ñ Ñого Ð²Ð·Ð°Ð³Ð°Ð»Ñ Ð¿Ð¾ÑÑÑбен опеÑаÑÐ¾Ñ in? Ð¥Ñба недоÑÑаÑнÑо поÑÑвнÑÐ½Ð½Ñ Ð· undefined?
У бÑлÑÑоÑÑÑ Ð²Ð¸Ð¿Ð°Ð´ÐºÑв пÑекÑаÑно ÑпÑаÑÑÑ Ð¿Ð¾ÑÑвнÑÐ½Ð½Ñ Ð· undefined. Ðле Ñ Ð¾Ñобливий випадок, коли воно не пÑдÑ
одиÑÑ, Ñ Ð¿Ð¾ÑÑÑбно викоÑиÑÑовÑваÑи "in".
Це коли влаÑÑивÑÑÑÑ ÑÑнÑÑ, але мÑÑÑиÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð½Ñ undefined:
let obj = {
test: undefined
};
alert( obj.test ); // виведеÑÑÑÑ undefined, знаÑиÑÑ Ð²Ð»Ð°ÑÑивÑÑÑÑ Ð½Ðµ ÑÑнÑÑ?
alert( "test" in obj ); // true, влаÑÑивÑÑÑÑ ÑÑнÑÑ!
У Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ð¾Ð¼Ñ Ð²Ð¸Ñе ÐºÐ¾Ð´Ñ Ð²Ð»Ð°ÑÑивÑÑÑÑ obj.test ÑеÑ
нÑÑно ÑÑнÑÑ. ÐÑже, опеÑаÑÐ¾Ñ in пÑаÑÑÑ Ð¿ÑавилÑно.
Ð¢Ð°ÐºÑ ÑиÑÑаÑÑÑ ÑÑаплÑÑÑÑÑÑ Ð´Ñже ÑÑдко, бо undefined не ÑлÑд Ñвно пÑизнаÑаÑи. Ðи в оÑÐ½Ð¾Ð²Ð½Ð¾Ð¼Ñ Ð²Ð¸ÐºÐ¾ÑиÑÑовÑÑмо null Ð´Ð»Ñ âневÑдомиÑ
â або âпоÑожнÑÑ
â знаÑенÑ. ÐÑже, опеÑаÑÐ¾Ñ in â екзоÑиÑний гÑÑÑÑ Ñ ÐºÐ¾Ð´Ñ.
Цикл "for..in"
ÐÐ»Ñ Ð¿ÐµÑебоÑÑ Ð²ÑÑÑ
влаÑÑивоÑÑей обâÑкÑа викоÑиÑÑовÑÑÑÑÑÑ Ñикл for..in. Цей Ñикл вÑдÑÑзнÑÑÑÑÑÑ Ð²Ñд вивÑеного ÑанÑÑе ÑÐ¸ÐºÐ»Ñ for(;;).
СинÑакÑиÑ:
for (key in object) {
// ÑÑло ÑÐ¸ÐºÐ»Ñ Ð²Ð¸ÐºÐ¾Ð½ÑÑÑÑÑÑ Ð´Ð»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ñ Ð²Ð»Ð°ÑÑивоÑÑÑ Ð¾Ð±âÑкÑа
}
ÐапÑиклад, виведемо вÑÑ Ð²Ð»Ð°ÑÑивоÑÑÑ user:
let user = {
name: "Ðван",
age: 30,
isAdmin: true
};
for (let key in user) {
// клÑÑÑ
alert( key ); // name, age, isAdmin
// знаÑÐµÐ½Ð½Ñ ÐºÐ»ÑÑÑв
alert( user[key] ); // Ðван, 30, true
}
ÐвеÑнÑÑÑ ÑвагÑ, Ñо вÑÑ ÐºÐ¾Ð½ÑÑÑÑкÑÑÑ âforâ дозволÑÑÑÑ Ð½Ð°Ð¼ оголоÑÑваÑи змÑÐ½Ð½Ñ Ð²ÑеÑÐµÐ´Ð¸Ð½Ñ ÑиклÑ, Ñк, напÑиклад, let key ÑÑÑ.
ÐÑÑм Ñого, ми могли б викоÑиÑÑовÑваÑи ÑнÑе ÑмâÑ Ð·Ð¼ÑнноÑ. ÐапÑиклад, ÑаÑÑо викоÑиÑÑовÑÑÑÑÑÑ Ð²Ð°ÑÑÐ°Ð½Ñ "for (let prop in obj)".
ÐпоÑÑдкÑÐ²Ð°Ð½Ð½Ñ Ð²Ð»Ð°ÑÑивоÑÑей обâÑкÑа
Чи ÑпоÑÑÐ´ÐºÐ¾Ð²Ð°Ð½Ñ Ð²Ð»Ð°ÑÑивоÑÑÑ Ð¾Ð±âÑкÑа? ÐнÑими Ñловами, ÑкÑо ми бÑдемо в ÑÐ¸ÐºÐ»Ñ Ð¿ÐµÑебиÑаÑи вÑÑ Ð²Ð»Ð°ÑÑивоÑÑÑ Ð¾Ð±âÑкÑа, Ñи оÑÑимаÑмо ми ÑÑ Ð² ÑÐ¾Ð¼Ñ Ð¶ поÑÑдкÑ, в ÑÐºÐ¾Ð¼Ñ Ð¼Ð¸ ÑÑ Ð´Ð¾Ð´Ð°Ð²Ð°Ð»Ð¸? Чи можемо ми на Ñе ÑозÑÐ°Ñ Ð¾Ð²ÑваÑи?
ÐоÑоÑка вÑдповÑдÑ: âвлаÑÑивоÑÑÑ Ð²Ð¿Ð¾ÑÑÐ´ÐºÐ¾Ð²Ð°Ð½Ñ Ð¾Ñобливим Ñиномâ. ÐлаÑÑивоÑÑÑ Ð· ÑÑлоÑиÑелÑними клÑÑами ÑоÑÑÑÑÑÑÑÑ Ð·Ð° зÑоÑÑаннÑм, ÑнÑÑ ÑозÑаÑовÑÑÑÑÑÑ Ð² поÑÑÐ´ÐºÑ ÑÑвоÑеннÑ. РозбеÑемоÑÑ Ð´Ð¾ÐºÐ»Ð°Ð´Ð½ÑÑе.
Як пÑиклад ÑозглÑнемо обâÑÐºÑ Ð· ÑелеÑонними кодами:
let codes ={
"49": "ÐÑмеÑÑина",
"41": "ШвейÑаÑÑÑ",
"44": "ÐеликобÑиÑанÑÑ",
// ..,
"1": "СШÐ"
};
for (let code in codes) {
alert(code); // 1, 41, 44, 49
}
ÐбâÑÐºÑ Ð¼Ð¾Ð¶Ðµ викоÑиÑÑовÑваÑиÑÑ, Ñоб запÑопонÑваÑи коÑиÑÑÑваÑÐµÐ²Ñ ÑпиÑок опÑÑй. ЯкÑо ми Ñобимо ÑÐ°Ð¹Ñ Ð´Ð»Ñ Ð½ÑмеÑÑÐºÐ¾Ñ Ð°ÑдиÑоÑÑÑ, Ñо, ймовÑÑно, ми Ñ
оÑемо, Ñоб код 49 бÑв пеÑÑим.
Ðле ÑкÑо ми запÑÑÑимо код, ми побаÑимо зовÑÑм ÑнÑÑ ÐºÐ°ÑÑинÑ:
- СШР(1) йде пеÑÑим
- поÑÑм ШвейÑаÑÑÑ (41) Ñ Ñак далÑ.
ТелеÑÐ¾Ð½Ð½Ñ ÐºÐ¾Ð´Ð¸ йдÑÑÑ Ð² поÑÑÐ´ÐºÑ Ð·ÑоÑÑаннÑ, ÑÐ¾Ð¼Ñ Ñо вони Ñ ÑÑлими ÑиÑлами: 1, 41, 44, 49.
ТеÑмÑн âÑÑлоÑиÑелÑна влаÑÑивÑÑÑÑâ ознаÑÐ°Ñ ÑÑдок, Ñкий може бÑÑи пеÑеÑвоÑений в ÑÑле ÑиÑло Ñ Ð½Ð°Ð·Ð°Ð´ без змÑн.
ТобÑо, ÑÑдок "49" â Ñе ÑÑлоÑиÑелÑне ÑмâÑ Ð²Ð»Ð°ÑÑивоÑÑÑ, ÑкÑо його пеÑеÑвоÑиÑи на ÑÑле ÑиÑло, а поÑÑм назад в ÑÑдок, Ñо воно не змÑниÑÑÑÑ. РоÑÑ Ð²Ð»Ð°ÑÑивоÑÑÑ "+49" або "1.2" Ñакими не Ñ:
// Number(...) -- Ñвно пеÑеÑвоÑÑÑ Ð½Ð° ÑиÑло
// Math.trunc -- вбÑдована ÑÑнкÑÑÑ, Ñка видалÑÑ Ð´ÐµÑÑÑÐºÐ¾Ð²Ñ ÑаÑÑинÑ
alert( String( Math.trunc( Number("49"))) ); // "49", Ñе ж Ñаме â влаÑÑивÑÑÑÑ ÑÑлоÑиÑелÑна
alert( String( Math.trunc( Number("+49"))) ); // "49", не Ñе ж Ñаме, Ñо "+49" â влаÑÑивÑÑÑÑ Ð½Ðµ ÑÑлоÑиÑелÑна
alert( String( Math.trunc( Number("1.2")))); // "1", не Ñе ж Ñаме, Ñо "1.2" â влаÑÑивÑÑÑÑ Ð½Ðµ ÑÑлоÑиÑелÑна
â¦Ð ÑнÑого бокÑ, ÑкÑо клÑÑ Ð½Ðµ ÑÑлоÑиÑелÑний, Ñо вони пеÑебиÑаÑÑÑÑÑ Ð² поÑÑÐ´ÐºÑ ÑÑвоÑеннÑ, напÑиклад:
let user = {
name: "Ðван",
surname: "Smith"
};
user.age = 25; // добавимо Ñе Ð¾Ð´Ð½Ñ Ð²Ð»Ð°ÑÑивÑÑÑÑ
// не ÑÑлоÑиÑелÑÐ½Ñ Ð²Ð»Ð°ÑÑивоÑÑÑ Ð¿ÐµÑеÑаÑ
Ð¾Ð²Ð°Ð½Ñ Ð² поÑÑÐ´ÐºÑ ÑÑвоÑеннÑ
for (let prop in user) {
alert( prop ); // name, surname, age
}
Таким Ñином, Ñоб ÑозвâÑзаÑи наÑÑ Ð¿ÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ð· ÑелеÑонними кодами, ми можемо ÑÑ
иÑÑÑваÑи, зÑобивÑи коди не ÑÑлоÑиÑелÑними влаÑÑивоÑÑÑми. Ðодамо знак "+" пеÑед кожним кодом.
ÐÑиклад:
let codes = {
"+49": "Germany",
"+41": "Switzerland",
"+44": "Great Britain",
// ..,
"+1": "USA"
};
for (let code in codes) {
alert( +code ); // 49, 41, 44, 1
}
ÐаÑаз ÑкÑÐ¸Ð¿Ñ Ð¿ÑаÑÑÑ, Ñк пеÑедбаÑалоÑÑ.
ÐиÑновок
ÐбâÑкÑи â Ñе аÑоÑÑаÑÐ¸Ð²Ð½Ñ Ð¼Ð°Ñиви з ÑÑдом додаÑÐºÐ¾Ð²Ð¸Ñ Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ÑÑей.
Ðони збеÑÑгаÑÑÑ Ð²Ð»Ð°ÑÑивоÑÑÑ (паÑи клÑÑ-знаÑеннÑ), де:
- ÐлÑÑÑ Ð²Ð»Ð°ÑÑивоÑÑей Ð¿Ð¾Ð²Ð¸Ð½Ð½Ñ Ð±ÑÑи ÑÑдками або Ñимволами (зазвиÑай ÑÑдками).
- ÐнаÑÐµÐ½Ð½Ñ Ð¼Ð¾Ð¶ÑÑÑ Ð±ÑÑи бÑдÑ-Ñкого ÑипÑ.
Щоб оÑÑимаÑи доÑÑÑп до влаÑÑивоÑÑÑ, ми можемо викоÑиÑÑовÑваÑи:
- ÐÐ°Ð¿Ð¸Ñ ÑеÑез кÑапкÑ:
obj.property. - ÐвадÑаÑÐ½Ñ Ð´Ñжки
obj["property"]. ÐвадÑаÑÐ½Ñ Ð´Ñжки дозволÑÑÑÑ Ð²Ð·ÑÑи клÑÑ Ð·Ñ Ð·Ð¼ÑнноÑ, напÑиклад,obj[varWithKey].
ÐодаÑÐºÐ¾Ð²Ñ Ð¾Ð¿ÐµÑаÑоÑи:
- ÐÐ¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð²Ð»Ð°ÑÑивоÑÑÑ:
delete obj.prop. - ÐеÑевÑÑка ÑÑнÑÐ²Ð°Ð½Ð½Ñ Ð²Ð»Ð°ÑÑивоÑÑÑ:
"key" in obj. - ÐеÑебÑÑ Ð²Ð»Ð°ÑÑивоÑÑей обâÑкÑа: Ñикл
for (let key in obj).
Те, Ñо ми вивÑали в ÑÑÐ¾Ð¼Ñ ÑоздÑлÑ, називаÑÑÑÑÑ âпÑоÑÑим обâÑкÑомâ або пÑоÑÑо Object.
Ð JavaScript Ñ Ð±Ð°Ð³Ð°Ñо ÑнÑÐ¸Ñ ÑипÑв обâÑкÑÑв:
ArrayÐ´Ð»Ñ Ð·Ð±ÐµÑÑÐ³Ð°Ð½Ð½Ñ Ð²Ð¿Ð¾ÑÑÐ´ÐºÐ¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ¾Ð»ÐµÐºÑÑй Ð´Ð°Ð½Ð¸Ñ ,DateÐ´Ð»Ñ Ð·Ð±ÐµÑÑÐ³Ð°Ð½Ð½Ñ ÑнÑоÑмаÑÑÑ Ð¿Ñо даÑÑ Ñ ÑаÑ,ErrorÐ´Ð»Ñ Ð·Ð±ÐµÑÑÐ³Ð°Ð½Ð½Ñ ÑнÑоÑмаÑÑÑ Ð¿Ñо помилкÑ.- â¦ Ñ Ñак далÑ.
У ниÑ
Ñ ÑÐ²Ð¾Ñ Ð¾ÑобливоÑÑÑ, ÑÐºÑ Ð¼Ð¸ вивÑимо пÑзнÑÑе. ÐÐ½Ð¾Ð´Ñ Ð»Ñди говоÑÑÑÑ ÑоÑÑ Ð½Ð° кÑÑÐ°Ð»Ñ âÑип даниÑ
Arrayâ або âÑип даниÑ
Dateâ, але ÑоÑмалÑно вони не Ñ Ð¾ÐºÑемими Ñипами, а належаÑÑ Ð´Ð¾ ÑÐ¸Ð¿Ñ Ð´Ð°Ð½Ð¸Ñ
"Object". Ðони лиÑе ÑозÑиÑÑÑÑÑ Ð¹Ð¾Ð³Ð¾ ÑÑзними ÑпоÑобами.
ÐбâÑкÑи в JavaScript дÑже поÑÑжнÑ. ТÑÑ Ð¼Ð¸ ÑÑлÑки ÑÑÐ¾Ñ Ð¸ заглибилиÑÑ Ð² дÑйÑно велиÑÐµÐ·Ð½Ñ ÑемÑ. Ðи бÑдемо ÑÑÑно пÑаÑÑваÑи з обâÑкÑами Ñа дÑзнаÑмоÑÑ Ð¿Ñо Ð½Ð¸Ñ Ð±ÑлÑÑе в наÑÑÑÐ¿Ð½Ð¸Ñ ÑаÑÑÐ¸Ð½Ð°Ñ Ð¿Ð¾ÑÑбника.
ÐоменÑаÑÑ
<code>, Ð´Ð»Ñ ÐºÑлÑÐºÐ¾Ñ ÑÑдкÑв â обгоÑнÑÑÑ ÑÑ Ñегом<pre>, Ð´Ð»Ñ Ð¿Ð¾Ð½Ð°Ð´ 10 ÑÑдкÑв â викоÑиÑÑовÑйÑе пÑÑоÑниÑÑ (plnkr, jsbin, codepenâ¦)