Гузариш ба мундариҷа
Мавзӯи 12 аз 16
Назария

Объектҳо

Ин барои чӣ лозим аст

Массив рӯйхатро бо тартиб нигоҳ медорад. Аммо як чиз-ро бо хусусиятҳои зиёд чӣ тавр тасвир кардан мумкин аст — масалан, корбарро бо ном, синну сол ва шаҳр? Барои ин объект ҳаст: маҷмӯи ҷуфтҳои «калид — қимат». Қариб ҳама чиз дар 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 ба як объект ишора мекунанд. Нусхабардорӣ — дар мавзӯи оянда.

Хатоҳои маъмул

  1. Нуқта бо тағйирёбанда. obj.key, вақте ки номи калид дар тағйирёбандаи key аст, хосиятро бо номи "key" меҷӯяд. Лозим аст obj[key].
  2. Вергул байни хосиятҳо фаромӯш шуд. { a: 1 b: 2 } — хатои синтаксисӣ.
  3. = ба ҷойи : дар дохили объект. { name = "Аня" } — хато. Дар дохили объект — ду нуқта.
  4. Илова ба чизи вуҷуднадошта. counts[word]++ барои калимаи нав NaN медиҳад (undefined + 1). Аввал 0 лозим: (counts[word] ?? 0) + 1.
  5. Тирча ҳамчун усул бо 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++; } }

Корбар

Осон+10 XP

Функсияи makeUser(name, age)-ро нависед, ки объектро бо се хосият бармегардонад:

  • name — ном;
  • age — синну сол;
  • isAdult — true, агар синну сол 18 ё зиёдтар бошад, вагарна false.
makeUser("Anna", 19)  → { name: "Anna", age: 19, isAdult: true }

Барои ҳал кардани масъалаҳо коннекторро пайваст кун

Коди масъалаҳо дар компютери худат иҷро мешавад — ин аз браузер тезтар ва боэътимодтар аст. Барои ин барномаи ройгони коннектори CodeWithMe лозим аст. Онро як бор пайваст кардан кифоя аст.

Коннекторро дар ин компютер ҷустуҷӯ мекунем…

  1. 1
    Коннекторро барои системаи худ (Windows, macOS ё Linux) зеркашӣ кун.Зеркашии коннекторДар саҳифаи зеркашӣ файлеро интихоб кун, ки дар номаш системаи ту ҳаст, масалан windows-amd64.
  2. 2Онро иҷро кун ва ҷузвдонеро интихоб кун, ки ҳалҳоят дар он ҷо меистанд. Python ва Node.js-ро ӯ худаш ҳангоми зарурат ба он ҷо мегузорад.
  3. 3
    Дар поён рамзи 6-рақамаро ворид кун — он дар равзанаи коннектор навишта шудааст («Рамз барои сайти CodeWithMe»). Агар браузер дар бораи дастрасӣ ба шабакаи маҳаллӣ пурсад — иҷозат деҳ.

Коннектор кушода аст (рамзи манбаъ дар GitHub), танҳо дар компютери ту кор мекунад ва кодро танҳо пас аз ворид кардани рамзи пайвастшавӣ иҷро мекунад.