25 август 2025
Ushbu material faqat quyidagi tillarda mavjud: . Iltimos, bizga Oʻzbek ga tarjima qilishda yordam bering.

Barcha xususiyatlarni olish

Obyektdan kalitlarni/qiymatlarni olishning ko’plab usullari mavjud.

Ularning aksariyati obyektning o’zida ishlaydi, prototipni hisobga olmaganda, keling ularni esga olamiz:

  • Object.keys(obj) / Object.values(obj) / Object.entries(obj) – sanab o’tiladigan o’z matnlar nomlari/qiymatlari/kalit-qiymat juftliklari massivini qaytaradi. Ushbu usullar faqat sanab o’tiladigan xususiyatlarni va matnlarni kalit sifatida ro’yxatini beradi.

Agar biz ramziy xususiyatlarni istasak:

Agar biz sanab bo’lmaydigan xususiyatlarni xohlasak:

Agar biz barcha xususiyatlarni xohlasak:

Ushbu usullar ularning qaysi xususiyatlarini qaytarishi haqida bir oz farq qiladi, ammo ularning barchasi obyektning o’zida ishlaydi. Prototipdagi xususiyatlar ro’yxatga kiritilmagan.

for…in tsikl

for..in tsikli boshqacha: u ham meros qilib olingan xususiyatlarni ko’rib chiqadi.

Masalan:

let animal = {
  eats: true
};

let rabbit = {
  jumps: true,
  __proto__: animal
};

// faqat o'z kalitlari
alert(Object.keys(rabbit)); // jumps

// meros kalitlari ham
for(let prop in rabbit) alert(prop); // jumps, then eats

Agar biz xohlamagan narsa bo’lsa va biz merosxo’rlik xususiyatlarini istisno qilmoqchi bo’lsak, o’rnatilgan usul mavjud obj.hasOwnProperty(key): u true ni qaytaradi, agar obj o’ziga xos key nomli (merosxo’r bo’lmagan) xususiyatga ega bo’lsa.

Shunday qilib, biz meros qilib olingan xususiyatlarni filtrlashimiz mumkin (yoki ular bilan boshqa biror narsa qilishimiz mumkin):

let animal = {
  eats: true,
};

let rabbit = {
  jumps: true,
  __proto__: animal,
};

for (let prop in rabbit) {
  let isOwn = rabbit.hasOwnProperty(prop);
  alert(`${prop}: ${isOwn}`); // jumps: true, then eats: false
}

Bu yerda bizda quyidagi meros zanjiri mavjud: rabbit, keyin animal, so’ngra Object.prototype (chunki animal literal obyekt {...}, shuning uchun u sukut bo’yicha) va keyin null yuqorida:

E’tibor bering, bitta kulgili narsa bor. rabbit.hasOwnProperty usuli qayerdan keladi? Zanjirga qarab, usul Object.prototype.hasOwnProperty tomonidan taqdim etilganligini ko’rishimiz mumkin. Boshqacha qilib aytganda, bu meros bo’lib qolgan.

…Lekin nima uchun hasOwnProperty ko’rinmaydi for..in tsikl, u barcha meros xususiyatlarini ro’yxatlar bo’lsa? Javob oddiy: uni sanab bo’lmaydi. Xuddi Object.prototype ning barcha boshqa xususiyatlari kabi. Shuning uchun ular ro’yxatga olinmagan.

Xulosa

Aksariyat usullar meros qilib olingan xususiyatlarni e’tiborsiz qoldiradi, bundan tashqari for..in bundan mustasno.

Ikkinchisi uchun biz obj.hasOwnProperty(key) dan foydalanishimiz mumkin: agar obj ning key nomli o’ziga xos (meros emas) xususiyati bo’lsa, u true ni qaytaradi.

O'quv qo'llanma xaritasi

Izohlar

izoh berishdan oldin buni o'qing…
  • Agar sizda nimani yaxshilash kerakligi haqida takliflaringiz bo'lsa - iltimos, GitHub muammosini yuboring yoki izoh berish o'rniga so'rov yuboring.
  • Agar siz maqolada biror narsani tushunolmasangiz - iltimos, batafsilroq ma'lumot bering.
  • Bir nechta so'z so'zlarini kiritish uchun <code> yorlig'ini ishlating, bir nechta satrlar uchun - ularni <pre> yorlig'i bilan o'rab qo'ying, 10 satrdan ortiq bo'lsa - sandbox (plnkr, jsbin, codepen…)