Объектҳо
Ин барои чӣ лозим аст
Массив рӯйхатро бо тартиб нигоҳ медорад. Аммо як чиз-ро бо хусусиятҳои зиёд чӣ тавр тасвир кардан мумкин аст — масалан, корбарро бо ном, синну сол ва шаҳр? Барои ин объект ҳаст: маҷмӯи ҷуфтҳои «калид — қимат». Қариб ҳама чиз дар JavaScript — объект аст: додаҳо аз сервер, танзимот, молҳо, паёмҳо. Ин сохтори муҳимтарини додаҳои забон аст.
Сохтан ва хондан
const user = {
name: "Аня",
age: 15,
city: "Хуҷанд",
};
console.log(user.name); // Аня — бо нуқта
console.log(user["city"]); // Хуҷанд — бо қавсҳои квадратӣ
console.log(user.email); // undefined — чунин хосият нест
Ҷуфтҳои калид: қимат бо вергул дар қавсҳои фигурӣ шумурда мешаванд. Калидҳоро инчунин хосиятҳо (properties) меноманд.
Нуқта ё қавс? Одатан нуқта. Қавсҳои квадратӣ вақте лозиманд, ки номи калид дар тағйирёбанда бошад ё фосила ё хатча дошта бошад:
const field = "age";
console.log(user[field]); // 15
const car = { "max-speed": 220 };
console.log(car["max-speed"]); // 220
Иваз, илова, хориҷ кардан
const user = { name: "Аня", age: 15 };
user.age = 16; // иваз кардан
user.city = "Душанбе"; // нав илова кардан
delete user.name; // хориҷ кардан
console.log(user);
Натиҷа:
{"age":16,"city":"Душанбе"}
Мисли массивҳо, const ба иваз кардани мӯҳтавои объект монеъ намешавад — танҳо гузоштани объекти дигар ба тағйирёбанда манъ аст.
Санҷидан, ки хосият ҳаст ё не
const settings = { theme: "dark", volume: 0 };
console.log("theme" in settings); // true
console.log("lang" in settings); // false
console.log(settings.volume ?? 50); // 0 — ?? 0-ро бо набудан омехта намекунад
Навишти кӯтоҳ
Агар номи тағйирёбанда бо номи калид мувофиқ ояд, як маротиба навиштан мумкин аст:
const name = "Тимур";
const age = 17;
const user = { name, age }; // ҳамон { name: name, age: age }
console.log(user);
Натиҷа:
{"name":"Тимур","age":17}
Гузаштан аз объект
const prices = { tea: 50, coffee: 90, juice: 70 };
for (const key in prices) {
console.log(key, prices[key]);
}
console.log(Object.keys(prices)); // калидҳо
console.log(Object.values(prices)); // қиматҳо
console.log(Object.entries(prices)); // ҷуфтҳои [калид, қимат]
Натиҷа:
tea 50
coffee 90
juice 70
["tea","coffee","juice"]
[50,90,70]
[["tea",50],["coffee",90],["juice",70]]
Object.keys/values/entries массив бармегардонанд, бинобар ин ҳамаи усулҳои массив ба онҳо мувофиқанд:
Object.values(prices).reduce((s, p) => s + p, 0) → 210.
Дарунӣ ва массиви объектҳо
Қимати хосият метавонад ҳар чиз бошад — массив, объекти дигар:
const student = {
name: "Ира",
marks: [5, 4, 5],
address: { city: "Бохтар", street: "Рӯдакӣ" },
};
console.log(student.address.city);
console.log(student.marks[1]);
Натиҷа:
Бохтар
4
Сохтори хеле маъмул — массиви объектҳо: рӯйхати молҳо, корбарон, паёмҳо.
Усулҳо ва this
Агар қимати хосият функсия бошад, онро усул (метод) меноманд:
const counter = {
value: 0,
increase() {
this.value++;
},
};
counter.increase();
counter.increase();
console.log(counter.value);
Натиҷа:
2
this дар дохили усул — объектест, ки усулро дар он даъват карданд (дар ин ҷо counter). Барои усулҳо ҳамин
навишти кӯтоҳ ё function-ро истифода баред, аммо на тирчаро: функсияҳои тирчадор this-и худро надоранд.
Дар дохил чӣ гуна кор мекунад
Объект мисли ҷевон бо қуттиҳои имзодор аст: аз рӯи имзо (калид) қуттӣ фавран ёфт мешавад, бе гузаштан аз
ҳамааш. Бинобар ин obj[key] ҳатто барои объектҳои азим хеле тез кор мекунад — маҳз бинобар ин объектҳо барои
шумориш ва гурӯҳбандӣ қулайанд. Калидҳои объект ҳамеша сатр-анд (ададҳо ба сатр табдил меёбанд): obj[1]
ва obj["1"] — як хосиятанд.
Тағйирёбанда на объектро, балки истинод-ро ба он нигоҳ медорад — мисли массивҳо. const b = a объектро
нусхабардорӣ намекунад: a ва b ба як объект ишора мекунанд. Нусхабардорӣ — дар мавзӯи оянда.
Хатоҳои маъмул
- Нуқта бо тағйирёбанда.
obj.key, вақте ки номи калид дар тағйирёбандаиkeyаст, хосиятро бо номи"key"меҷӯяд. Лозим астobj[key]. - Вергул байни хосиятҳо фаромӯш шуд.
{ a: 1 b: 2 }— хатои синтаксисӣ. =ба ҷойи:дар дохили объект.{ name = "Аня" }— хато. Дар дохили объект — ду нуқта.- Илова ба чизи вуҷуднадошта.
counts[word]++барои калимаи навNaNмедиҳад (undefined + 1). Аввал0лозим:(counts[word] ?? 0) + 1. - Тирча ҳамчун усул бо
this.{ go: () => this.x }—thisобъект намешавад.
Ёддошт
| Чӣ | Чӣ тавр |
|---|---|
| Сохтан | const o = { a: 1, b: "x" }; |
| Хондан | o.a, o["a"], o[key] |
| Иваз / илова | o.a = 2; o.c = true; |
| Хориҷ кардан | delete o.a |
| Ҳаст ё не | "a" in o |
| Навишти кӯтоҳ | { name, age } |
| Гузаштан | for (const k in o), Object.keys/values/entries(o) |
| Усул | { go() { this.x++; } } |