Ðак Ð¼Ñ Ð·Ð½Ð°ÐµÐ¼ из Ð³Ð»Ð°Ð²Ñ Ð¢Ð¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ , в JavaScript ÑÑÑеÑÑвÑÐµÑ 8 Ñипов даннÑÑ . Ð¡ÐµÐ¼Ñ Ð¸Ð· Ð½Ð¸Ñ Ð½Ð°Ð·ÑваÑÑÑÑ Â«Ð¿ÑимиÑивнÑми», Ñак как ÑодеÑÐ¶Ð°Ñ ÑолÑко одно знаÑение (бÑÐ´Ñ Ñо ÑÑÑока, ÑиÑло или ÑÑо-Ñо дÑÑгое).
ÐбÑекÑÑ Ð¶Ðµ иÑполÑзÑÑÑÑÑ Ð´Ð»Ñ Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð»Ð»ÐµÐºÑий ÑазлиÑнÑÑ Ð·Ð½Ð°Ñений и более ÑложнÑÑ ÑÑÑноÑÑей. Ð JavaScript обÑекÑÑ Ð¸ÑполÑзÑÑÑÑÑ Ð¾ÑÐµÐ½Ñ ÑаÑÑо, ÑÑо одна из оÑнов ÑзÑка. ÐоÑÑÐ¾Ð¼Ñ Ð¼Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¿Ð¾Ð½ÑÑÑ Ð¸Ñ , пÑежде Ñем ÑглÑблÑÑÑÑÑ ÐºÑда-либо еÑÑ.
ÐбÑÐµÐºÑ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñоздан Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑигÑÑнÑÑ
Ñкобок {â¦} Ñ Ð½ÐµÐ¾Ð±ÑзаÑелÑнÑм ÑпиÑком ÑвойÑÑв. СвойÑÑво â ÑÑо паÑа «клÑÑ: знаÑение», где клÑÑ â ÑÑо ÑÑÑока (Ñакже назÑÐ²Ð°ÐµÐ¼Ð°Ñ Â«Ð¸Ð¼ÐµÐ½ÐµÐ¼ ÑвойÑÑва»), а знаÑение Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñем Ñгодно.
ÐÑ Ð¼Ð¾Ð¶ÐµÐ¼ пÑедÑÑавиÑÑ Ð¾Ð±ÑÐµÐºÑ Ð² виде ÑÑика Ñ Ð¿Ð¾Ð´Ð¿Ð¸ÑаннÑми папками. ÐаждÑй ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð´Ð°Ð½Ð½ÑÑ Ñ ÑаниÑÑÑ Ð² Ñвоей папке, на коÑоÑой напиÑан клÑÑ. Ðо клÑÑÑ Ð¿Ð°Ð¿ÐºÑ Ð»ÐµÐ³ÐºÐ¾ найÑи, ÑдалиÑÑ Ð¸Ð»Ð¸ добавиÑÑ Ð² Ð½ÐµÑ ÑÑо-либо.
ÐÑÑÑой обÑÐµÐºÑ («пÑÑÑой ÑÑик») можно ÑоздаÑÑ, иÑполÑзÑÑ Ð¾Ð´Ð¸Ð½ из двÑÑ Ð²Ð°ÑианÑов ÑинÑакÑиÑа:
let user = new Object(); // ÑинÑакÑÐ¸Ñ "конÑÑÑÑкÑÐ¾Ñ Ð¾Ð±ÑекÑа"
let user = {}; // ÑинÑакÑÐ¸Ñ "лиÑеÑал обÑекÑа"
ÐбÑÑно иÑполÑзÑÑÑ Ð²Ð°ÑÐ¸Ð°Ð½Ñ Ñ ÑигÑÑнÑми Ñкобками {...}. Такое обÑÑвление назÑваÑÑ Ð»Ð¸ÑеÑалом обÑекÑа или лиÑеÑалÑной ноÑаÑией.
ÐиÑеÑÐ°Ð»Ñ Ð¸ ÑвойÑÑва
ÐÑи иÑполÑзовании лиÑеÑалÑного ÑинÑакÑиÑа {...} Ð¼Ñ ÑÑÐ°Ð·Ñ Ð¼Ð¾Ð¶ÐµÐ¼ помеÑÑиÑÑ Ð² обÑÐµÐºÑ Ð½ÐµÑколÑко ÑвойÑÑв в виде Ð¿Ð°Ñ Â«ÐºÐ»ÑÑ: знаÑение»:
let user = { // обÑекÑ
name: "John", // под клÑÑом "name" Ñ
ÑаниÑÑÑ Ð·Ð½Ð°Ñение "John"
age: 30 // под клÑÑом "age" Ñ
ÑаниÑÑÑ Ð·Ð½Ð°Ñение 30
};
У каждого ÑвойÑÑва еÑÑÑ ÐºÐ»ÑÑ (Ñакже назÑваемÑй «имÑ» или «иденÑиÑикаÑоÑ»). ÐоÑле имени ÑвойÑÑва ÑледÑÐµÑ Ð´Ð²Ð¾ÐµÑоÑие ":", и заÑем ÑказÑваеÑÑÑ Ð·Ð½Ð°Ñение ÑвойÑÑва. ÐÑли в обÑекÑе неÑколÑко ÑвойÑÑв, Ñо они пеÑеÑиÑлÑÑÑÑÑ ÑеÑез запÑÑÑÑ.
РобÑекÑе user ÑейÑÐ°Ñ Ð½Ð°Ñ
одÑÑÑÑ Ð´Ð²Ð° ÑвойÑÑва:
- ÐеÑвое ÑвойÑÑво Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼
"name"и знаÑением"John". - ÐÑоÑое ÑвойÑÑво Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼
"age"и знаÑением30.
Ðожно ÑказаÑÑ, ÑÑо Ð½Ð°Ñ Ð¾Ð±ÑÐµÐºÑ user â ÑÑо ÑÑик Ñ Ð´Ð²ÑÐ¼Ñ Ð¿Ð°Ð¿ÐºÐ°Ð¼Ð¸, подпиÑаннÑми «name» и «age».
ÐÑ Ð¼Ð¾Ð¶ÐµÐ¼ в лÑбой Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ Ð² него новÑе папки, ÑдалиÑÑ Ð¿Ð°Ð¿ÐºÐ¸ или пÑоÑиÑаÑÑ ÑодеÑжимое лÑбой папки.
ÐÐ»Ñ Ð¾Ð±ÑаÑÐµÐ½Ð¸Ñ Ðº ÑвойÑÑвам иÑполÑзÑеÑÑÑ Ð·Ð°Ð¿Ð¸ÑÑ Â«ÑеÑез ÑоÑкÑ»:
// полÑÑаем ÑвойÑÑва обÑекÑа:
alert( user.name ); // John
alert( user.age ); // 30
ÐнаÑение Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð»Ñбого Ñипа. ÐавайÑе добавим ÑвойÑÑво Ñ Ð»Ð¾Ð³Ð¸ÑеÑким знаÑением:
user.isAdmin = true;
ÐÐ»Ñ ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ ÑвойÑÑва Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ иÑполÑзоваÑÑ Ð¾Ð¿ÐµÑаÑÐ¾Ñ delete:
delete user.age;
ÐÐ¼Ñ ÑвойÑÑва Ð¼Ð¾Ð¶ÐµÑ ÑоÑÑоÑÑÑ Ð¸Ð· неÑколÑÐºÐ¸Ñ Ñлов, но Ñогда оно должно бÑÑÑ Ð·Ð°ÐºÐ»ÑÑено в кавÑÑки:
let user = {
name: "John",
age: 30,
"likes birds": true // Ð¸Ð¼Ñ ÑвойÑÑва из неÑколÑкиÑ
Ñлов должно бÑÑÑ Ð² кавÑÑкаÑ
};
ÐоÑледнее ÑвойÑÑво обÑекÑа Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°ÐºÐ°Ð½ÑиваÑÑÑÑ Ð·Ð°Ð¿ÑÑой:
let user = {
name: "John",
age: 30,
}
ÐÑо назÑваеÑÑÑ Â«Ð²Ð¸ÑÑÑÐ°Ñ Ð·Ð°Ð¿ÑÑаÑ». Такой Ð¿Ð¾Ð´Ñ Ð¾Ð´ ÑпÑоÑÐ°ÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ, Ñдаление и пеÑемеÑение ÑвойÑÑв, Ñак как вÑе ÑÑÑоки обÑекÑа ÑÑановÑÑÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñми.
ÐбÑекÑ, обÑÑвленнÑй ÑеÑез const, Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¸Ð·Ð¼ÐµÐ½Ñн.
ÐапÑимеÑ:
const user = {
name: "John"
};
user.name = "Pete"; // (*)
alert(user.name); // Pete
ÐÐ¾Ð¶ÐµÑ Ð¿Ð¾ÐºÐ°Ð·Ð°ÑÑÑÑ, ÑÑо ÑÑÑока (*) должна вÑзваÑÑ Ð¾ÑибкÑ, но неÑ, здеÑÑ Ð²ÑÑ Ð² поÑÑдке. Ðело в Ñом, ÑÑо обÑÑвление const заÑиÑÐ°ÐµÑ Ð¾Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ ÑолÑко ÑÐ°Ð¼Ñ Ð¿ÐµÑеменнÑÑ user, а не ÐµÑ ÑодеÑжимое.
ÐпÑеделение const вÑдаÑÑ Ð¾ÑÐ¸Ð±ÐºÑ ÑолÑко еÑли Ð¼Ñ Ð¿ÑиÑвоим пеÑеменной дÑÑгое знаÑение: user=....
ÐÑÑÑ ÐµÑÑ Ð¾Ð´Ð¸Ð½ ÑпоÑоб ÑделаÑÑ ÐºÐ¾Ð½ÑÑанÑами ÑвойÑÑва обÑекÑа, коÑоÑÑй Ð¼Ñ ÑаÑÑмоÑÑим в главе Флаги и деÑкÑипÑоÑÑ ÑвойÑÑв.
ÐвадÑаÑнÑе Ñкобки
ÐÐ»Ñ ÑвойÑÑв, имена коÑоÑÑÑ ÑоÑÑоÑÑ Ð¸Ð· неÑколÑÐºÐ¸Ñ Ñлов, доÑÑÑп к знаÑÐµÐ½Ð¸Ñ Â«ÑеÑез ÑоÑкÑ» не ÑабоÑаеÑ:
// ÑÑо вÑÐ·Ð¾Ð²ÐµÑ ÑинÑакÑиÑеÑкÑÑ Ð¾ÑибкÑ
user.likes birds = true
JavaScript видиÑ, ÑÑо Ð¼Ñ Ð¾Ð±ÑаÑаемÑÑ Ðº ÑвойÑÑÐ²Ñ user.likes, а заÑем идÑÑ Ð½ÐµÐ¿Ð¾Ð½ÑÑное Ñлово birds. РиÑоге ÑинÑакÑиÑеÑÐºÐ°Ñ Ð¾Ñибка.
ТоÑка ÑÑебÑеÑ, ÑÑÐ¾Ð±Ñ ÐºÐ»ÑÑ Ð±Ñл именован по пÑавилам Ð¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿ÐµÑеменнÑÑ
. То еÑÑÑ Ð½Ðµ имел пÑобелов, не наÑиналÑÑ Ñ ÑиÑÑÑ Ð¸ не ÑодеÑжал ÑпеÑиалÑнÑе ÑимволÑ, кÑоме $ и _.
ÐÐ»Ñ ÑÐ°ÐºÐ¸Ñ ÑлÑÑаев ÑÑÑеÑÑвÑÐµÑ Ð°Ð»ÑÑеÑнаÑивнÑй ÑпоÑоб доÑÑÑпа к ÑвойÑÑвам ÑеÑез квадÑаÑнÑе Ñкобки. Такой ÑпоÑоб ÑÑабоÑÐ°ÐµÑ Ñ Ð»ÑбÑм именем ÑвойÑÑва:
let user = {};
// пÑиÑваивание знаÑÐµÐ½Ð¸Ñ ÑвойÑÑвÑ
user["likes birds"] = true;
// полÑÑение знаÑÐµÐ½Ð¸Ñ ÑвойÑÑва
alert(user["likes birds"]); // true
// Ñдаление ÑвойÑÑва
delete user["likes birds"];
СейÑÐ°Ñ Ð²ÑÑ Ð² поÑÑдке. ÐбÑаÑиÑе внимание, ÑÑо ÑÑÑока в квадÑаÑнÑÑ ÑÐºÐ¾Ð±ÐºÐ°Ñ Ð·Ð°ÐºÐ»ÑÑена в кавÑÑки (подойдÑÑ Ð»Ñбой Ñип кавÑÑек).
ÐвадÑаÑнÑе Ñкобки Ñакже позволÑÑÑ Ð¾Ð±ÑаÑиÑÑÑÑ Ðº ÑвойÑÑвÑ, Ð¸Ð¼Ñ ÐºÐ¾ÑоÑого Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑезÑлÑÑаÑом вÑÑажениÑ. ÐапÑимеÑ, Ð¸Ð¼Ñ ÑвойÑÑва Ð¼Ð¾Ð¶ÐµÑ Ñ ÑаниÑÑÑÑ Ð² пеÑеменной:
let key = "likes birds";
// Ñо же Ñамое, ÑÑо и user["likes birds"] = true;
user[key] = true;
ÐдеÑÑ Ð¿ÐµÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ key Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð²ÑÑиÑлена во вÑÐµÐ¼Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð´Ð° или завиÑеÑÑ Ð¾Ñ Ð¿Ð¾Ð»ÑзоваÑелÑÑкого ввода. ÐоÑле ÑÑого Ð¼Ñ Ð¸ÑполÑзÑем ÐµÑ Ð´Ð»Ñ Ð´Ð¾ÑÑÑпа к ÑвойÑÑвÑ. ÐÑо даÑÑ Ð½Ð°Ð¼ болÑÑÑÑ Ð³Ð¸Ð±ÐºÐ¾ÑÑÑ.
ÐÑимеÑ:
let user = {
name: "John",
age: 30
};
let key = prompt("ЧÑо Ð²Ñ Ñ
оÑиÑе ÑзнаÑÑ Ð¾ полÑзоваÑеле?", "name");
// доÑÑÑп к ÑвойÑÑÐ²Ñ ÑеÑез пеÑеменнÑÑ
alert( user[key] ); // John (еÑли ввели "name")
ÐапиÑÑ Â«ÑеÑез ÑоÑкÑ» Ñакого не позволÑеÑ:
let user = {
name: "John",
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
};
ÐвадÑаÑнÑе Ñкобки даÑÑ Ð½Ð°Ð¼Ð½Ð¾Ð³Ð¾ болÑÑе возможноÑÑей, Ñем запиÑÑ ÑеÑез ÑоÑкÑ. Ðни позволÑÑÑ Ð¸ÑполÑзоваÑÑ Ð»ÑбÑе имена ÑвойÑÑв и пеÑеменнÑе, Ñ Ð¾ÑÑ Ð¸ ÑÑебÑÑÑ Ð±Ð¾Ð»ÐµÐµ гÑÐ¾Ð¼Ð¾Ð·Ð´ÐºÐ¸Ñ ÐºÐ¾Ð½ÑÑÑÑкÑий кода.
ÐодведÑм иÑог: в болÑÑинÑÑве ÑлÑÑаев, когда имена ÑвойÑÑв извеÑÑÐ½Ñ Ð¸ пÑоÑÑÑ, иÑполÑзÑеÑÑÑ Ð·Ð°Ð¿Ð¸ÑÑ ÑеÑез ÑоÑкÑ. ÐÑли же нам нÑжно ÑÑо-Ñо более Ñложное, Ñо Ð¼Ñ Ð¸ÑполÑзÑем квадÑаÑнÑе Ñкобки.
СвойÑÑво из пеÑеменной
Ð ÑеалÑном коде ÑаÑÑо нам Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ иÑполÑзоваÑÑ ÑÑÑеÑÑвÑÑÑие пеÑеменнÑе как знаÑÐµÐ½Ð¸Ñ Ð´Ð»Ñ ÑвойÑÑв Ñ Ñем же именем.
ÐапÑимеÑ:
function makeUser(name, age) {
return {
name: name,
age: age
// ...дÑÑгие ÑвойÑÑва
};
}
let user = makeUser("John", 30);
alert(user.name); // John
РпÑимеÑе вÑÑе название ÑвойÑÑв name и age ÑовпадаÑÑ Ñ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñми пеÑеменнÑÑ
, коÑоÑÑе Ð¼Ñ Ð¿Ð¾Ð´ÑÑавлÑем в каÑеÑÑве знаÑений ÑÑиÑ
ÑвойÑÑв. Такой подÑ
од наÑÑолÑко ÑаÑпÑоÑÑÑанÑн, ÑÑо ÑÑÑеÑÑвÑÑÑ ÑпеÑиалÑнÑе коÑоÑкие ÑвойÑÑва Ð´Ð»Ñ ÑпÑоÑÐµÐ½Ð¸Ñ ÑÑой запиÑи.
ÐмеÑÑо 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": "ТеÑÑ"
};
// обе ÑÑнкÑии alert вÑведÑÑ Ð¾Ð´Ð½Ð¾ и Ñо же ÑвойÑÑво (ÑиÑло 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: "John", 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, Ð¸Ð¼Ñ ÑвойÑÑва бÑло взÑÑо из пеÑеменной key
ÐÐ»Ñ Ñего вообÑе нÑжен опеÑаÑÐ¾Ñ in? Разве недоÑÑаÑоÑно ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ñ undefined?
РболÑÑинÑÑве ÑлÑÑаев пÑекÑаÑно ÑÑабоÑÐ°ÐµÑ ÑÑавнение Ñ undefined. Ðо еÑÑÑ Ð¾ÑобÑй ÑлÑÑай, когда оно не подÑ
Ð¾Ð´Ð¸Ñ Ð¸ нÑжно иÑполÑзоваÑÑ "in".
ÐÑо когда ÑвойÑÑво ÑÑÑеÑÑвÑеÑ, но ÑодеÑÐ¶Ð¸Ñ Ð·Ð½Ð°Ñение undefined:
let obj = {
test: undefined
};
alert( obj.test ); // вÑÐ²ÐµÐ´ÐµÑ undefined, знаÑÐ¸Ñ ÑвойÑÑво не ÑÑÑеÑÑвÑеÑ?
alert( "test" in obj ); // true, ÑвойÑÑво ÑÑÑеÑÑвÑеÑ!
РпÑимеÑе вÑÑе ÑвойÑÑво obj.test ÑеÑ
ниÑеÑки ÑÑÑеÑÑвÑÐµÑ Ð² обÑекÑе. ÐпеÑаÑÐ¾Ñ in ÑÑабоÑал пÑавилÑно.
ÐодобнÑе ÑиÑÑаÑии ÑлÑÑаÑÑÑÑ Ð¾ÑÐµÐ½Ñ Ñедко, Ñак как undefined обÑÑно Ñвно не пÑиÑваиваеÑÑÑ. ÐÐ»Ñ Â«Ð½ÐµÐ¸Ð·Ð²ÐµÑÑнÑÑ
» или «пÑÑÑÑÑ
» ÑвойÑÑв Ð¼Ñ Ð¸ÑполÑзÑем знаÑение null.
Цикл "for..in"
ÐÐ»Ñ Ð¿ÐµÑебоÑа вÑеÑ
ÑвойÑÑв обÑекÑа иÑполÑзÑеÑÑÑ Ñикл for..in. ÐÑÐ¾Ñ Ñикл оÑлиÑаеÑÑÑ Ð¾Ñ Ð¸Ð·ÑÑенного Ñанее Ñикла for(;;).
СинÑакÑиÑ:
for (key in object) {
// Ñело Ñикла вÑполнÑеÑÑÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ ÑвойÑÑва обÑекÑа
}
РпÑимеÑÑ, давайÑе вÑведем вÑе ÑвойÑÑва обÑекÑа user:
let user = {
name: "John",
age: 30,
isAdmin: true
};
for (let key in user) {
// клÑÑи
alert( key ); // name, age, isAdmin
// знаÑÐµÐ½Ð¸Ñ ÐºÐ»ÑÑей
alert( user[key] ); // John, 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" ÑаковÑми не ÑвлÑÑÑÑÑ:
// 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: "John",
surname: "Smith"
};
user.age = 25; // добавим еÑÑ Ð¾Ð´Ð½Ð¾ ÑвойÑÑво
// не ÑелоÑиÑленнÑе ÑвойÑÑва пеÑеÑиÑÐ»ÐµÐ½Ñ Ð² поÑÑдке ÑозданиÑ
for (let prop in user) {
alert( prop ); // name, surname, age
}
Таким обÑазом, ÑÑÐ¾Ð±Ñ ÑеÑиÑÑ Ð½Ð°ÑÑ Ð¿ÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ñ ÑелеÑоннÑми кодами, Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ ÑÑ
иÑÑиÑÑ, Ñделав ÐºÐ¾Ð´Ñ Ð½Ðµ ÑелоÑиÑленнÑми ÑвойÑÑвами. ÐÐ¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð·Ð½Ð°ÐºÐ° "+" пеÑед каждÑм кодом бÑÐ´ÐµÑ Ð´Ð¾ÑÑаÑоÑно.
ÐÑимеÑ:
let codes = {
"+49": "ÐеÑманиÑ",
"+41": "ШвейÑаÑиÑ",
"+44": "ÐеликобÑиÑаниÑ",
// ..,
"+1": "СШÐ"
};
for (let code in codes) {
alert( +code ); // 49, 41, 44, 1
}
ТепеÑÑ ÐºÐ¾Ð´ ÑабоÑÐ°ÐµÑ Ñак, как Ð¼Ñ Ð·Ð°Ð´ÑмÑвали.
ÐÑого
ÐбÑекÑÑ â ÑÑо аÑÑоÑиаÑивнÑе маÑÑÐ¸Ð²Ñ Ñ ÑÑдом дополниÑелÑнÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑей.
Ðни Ñ ÑанÑÑ ÑвойÑÑва (паÑÑ ÐºÐ»ÑÑ-знаÑение), где:
- ÐлÑÑи ÑвойÑÑв Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ ÑÑÑоками или Ñимволами (обÑÑно ÑÑÑоками).
- ÐнаÑÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ Ð»Ñбого Ñипа.
ЧÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ Ð´Ð¾ÑÑÑп к ÑвойÑÑвÑ, Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ иÑполÑзоваÑÑ:
- ÐапиÑÑ ÑеÑез ÑоÑкÑ:
obj.property. - ÐвадÑаÑнÑе Ñкобки
obj["property"]. ÐвадÑаÑнÑе Ñкобки позволÑÑÑ Ð²Ð·ÑÑÑ ÐºÐ»ÑÑ Ð¸Ð· пеÑеменной, напÑимеÑ,obj[varWithKey].
ÐополниÑелÑнÑе опеÑаÑоÑÑ:
- Удаление ÑвойÑÑва:
delete obj.prop. - ÐÑовеÑка ÑÑÑеÑÑÐ²Ð¾Ð²Ð°Ð½Ð¸Ñ ÑвойÑÑва:
"key" in obj. - ÐеÑÐµÐ±Ð¾Ñ ÑвойÑÑв обÑекÑа: Ñикл for
for (let key in obj).
То, ÑÑо Ð¼Ñ Ð¸Ð·ÑÑали в ÑÑой главе, назÑваеÑÑÑ Â«Ð¿ÑоÑÑÑм обÑекÑом» («plain object») или пÑоÑÑо Object.
Ð JavaScript еÑÑÑ Ð¼Ð½Ð¾Ð³Ð¾ дÑÑÐ³Ð¸Ñ Ñипов обÑекÑов:
ArrayÐ´Ð»Ñ Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ ÑпоÑÑдоÑеннÑÑ ÐºÐ¾Ð»Ð»ÐµÐºÑий даннÑÑ ,DateÐ´Ð»Ñ Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð¸Ð½ÑоÑмаÑии о даÑе и вÑемени,ErrorÐ´Ð»Ñ Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð¸Ð½ÑоÑмаÑии об оÑибке.- ⦠и Ñак далее.
У ниÑ
еÑÑÑ Ñвои оÑобенноÑÑи, коÑоÑÑе Ð¼Ñ Ð¸Ð·ÑÑим позже. Ðногда лÑди говоÑÑÑ ÑÑо-Ñо вÑоде «Ñип даннÑÑ
Array» или «Ñип даннÑÑ
Date», но ÑоÑмалÑно они не ÑвлÑÑÑÑÑ Ð¾ÑделÑнÑми Ñипами, а оÑноÑÑÑÑÑ Ðº ÑÐ¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ
Object. Ðни лиÑÑ ÑаÑÑиÑÑÑÑ ÐµÐ³Ð¾ ÑазлиÑнÑми ÑпоÑобами.
ÐбÑекÑÑ Ð² JavaScript оÑÐµÐ½Ñ Ð¼Ð¾ÑнÑе. ÐдеÑÑ Ð¼Ñ ÑолÑко немного ÑглÑбилиÑÑ Ð² дейÑÑвиÑелÑно огÑомнÑÑ ÑемÑ. ÐÑ Ð±Ñдем плоÑно ÑабоÑаÑÑ Ñ Ð¾Ð±ÑекÑами и Ñзнаем о Ð½Ð¸Ñ Ð±Ð¾Ð»ÑÑе в ÑледÑÑÑÐ¸Ñ ÑаÑÑÑÑ ÑÑебника.
ÐомменÑаÑии
<code>, Ð´Ð»Ñ Ð½ÐµÑколÑÐºÐ¸Ñ ÑÑÑок кода — Ñег<pre>, еÑли болÑÑе 10 ÑÑÑок — ÑÑÑÐ»ÐºÑ Ð½Ð° пеÑоÑниÑÑ (plnkr, JSBin, codepenâ¦)