Ob'ektlar — yaratish, o'qish, o'zgartirish, o'chirish
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