Ob'ektlar — yaratish, o'qish, o'zgartirish, o'chirish

~20 daq · JavaScript · Ob'ektlar va Massivlar

Muammodan boshlaylik

Foydalanuvchi haqida ma'lumot saqlash kerak: ism, yosh, email, manzil. Har birini alohida o'zgaruvchiga yozish mumkin — lekin 100 ta foydalanuvchi bo'lsa? 400 ta o'zgaruvchi?

Ob'ekt — bir nechta bog'liq ma'lumotni bitta joyda saqlash imkonini beradi.


Ob'ekt nima?

Ob'ekt — kalit-qiymat juftliklari to'plami. Har bir xususiyat (property) — nom va qiymat.

const foydalanuvchi = {
  ism: "Ali",
  yosh: 25,
  email: "ali@example.com"
};

Hayotiy o'xshatma: pasport. Pasportda ism, tug'ilgan sana, rasm — hammasi bir joyda, tartibli. Ob'ekt — dasturlashdagi pasport.


Ob'ekt yaratish

Literal sintaksis — eng ko'p ishlatiladigan

const mahsulot = {
  nom: "Laptop",
  narx: 5000000,
  mavjud: true
};

new Object() — kamdan-kam

const mahsulot = new Object();
mahsulot.nom = "Laptop";
mahsulot.narx = 5000000;

Literal sintaksis qisqaroq — har doim u ishlatiladi.


Xususiyatga murojaat — o'qish

Nuqta notatsiyasi

console.log(foydalanuvchi.ism);   // "Ali"
console.log(foydalanuvchi.yosh);  // 25

Kvadrat qavs notatsiyasi

console.log(foydalanuvchi["ism"]);  // "Ali"
console.log(foydalanuvchi["yosh"]); // 25

Qachon kvadrat qavs kerak?

const kalit = "email";
console.log(foydalanuvchi[kalit]); // ← o'zgaruvchi

const ob = {
  "ism familiya": "Ali Valiyev", // ← bo'shliq bor
  "1-raqam": 100                  // ← raqam bilan boshlanadi
};
console.log(ob["ism familiya"]); // nuqta bilan ishlamaydi

Xususiyat qo'shish va o'zgartirish

const odam = { ism: "Ali" };

odam.yosh = 25;        // ← yangi xususiyat
odam.ism = "Vali";     // ← mavjudini o'zgartirish

console.log(odam); // { ism: "Vali", yosh: 25 }

const ob'ektning o'zini himoyalamaydi — faqat o'zgaruvchini. Ob'ekt ichini o'zgartirish mumkin.


Xususiyat o'chirish

const odam = { ism: "Ali", yosh: 25, shahar: "Toshkent" };

delete odam.shahar;

console.log(odam); // { ism: "Ali", yosh: 25 }

Nima uchun shunday?

Nima uchun const ob'ektni o'zgartirish mumkin?

const — o'zgaruvchini qayta tayinlashni taqiqlaydi:

const odam = { ism: "Ali" };
odam = { ism: "Vali" }; // ❌ TypeError — qayta tayinlash mumkin emas

odam.ism = "Vali"; // ✅ ob'ekt ichini o'zgartirish mumkin

Ob'ektni butunlay o'zgarmas qilish uchun — Object.freeze():

const odam = Object.freeze({ ism: "Ali" });
odam.ism = "Vali"; // ❌ strict mode da xato, oddiy rejimda e'tiborsiz qoldiriladi

Ichma-ich ob'ektlar

const foydalanuvchi = {
  ism: "Ali",
  manzil: {
    shahar: "Toshkent",
    tuman: "Yunusobod"
  }
};

console.log(foydalanuvchi.manzil.shahar); // "Toshkent"

Xususiyat mavjudligini tekshirish

const odam = { ism: "Ali", yosh: 25 };

// 1. `in` operatori
console.log("ism" in odam);    // true
console.log("email" in odam);  // false

// 2. `undefined` bilan taqqoslash
console.log(odam.email === undefined); // true

// 3. Optional chaining (ES2020)
console.log(odam.email?.toLowerCase()); // undefined — xato emas

Tez-tez uchraydigan xatolar

Mavjud bo'lmagan xususiyatga murojaat:

const odam = { ism: "Ali" };
console.log(odam.email.toLowerCase()); // ❌ TypeError — email undefined
console.log(odam.email?.toLowerCase()); // ✅ undefined

Kalit nomida bo'shliq — nuqta ishlamaydi:

const ob = { "to'liq ism": "Ali Valiyev" };
console.log(ob.to'liq ism); // ❌ SyntaxError
console.log(ob["to'liq ism"]); // ✅

delete o'rniga null tayinlash:

odam.yosh = null; // ❌ xususiyat qoladi, qiymati null
delete odam.yosh; // ✅ xususiyat o'chiriladi

Xulosa

Ob'ekt — kalit-qiymat juftliklari. Bog'liq ma'lumotni bitta joyda saqlash uchun.

Yaratish: { kalit: qiymat } — literal sintaksis.

Murojaat: ob.kalit yoki ob["kalit"]. O'zgaruvchi yoki maxsus belgi bo'lsa — kvadrat qavs.

const ob'ektni qayta tayinlashni taqiqlaydi — ichini o'zgartirish mumkin. Butunlay o'zgarmas qilish uchun — Object.freeze().


Keyingi dars

18-dars: Ob'ekt metodlari — this kalit so'zi