JavaScriptdagi obyektlar(Objects)
Ma'lumki, JavaScriptda sakkizta ma'lumot turi mavjud. Ulardan yettitasi "primitive" deb ataladi, chunki ularning qiymatlari faqat bitta narsani (masalan, string yoki son) o'z ichiga oladi. Bundan farqli o'laroq, ob'ektlar turli ma'lumotlarning kalitlar orqali to'plamini va yanada murakkab entitylarni saqlash uchun ishlatiladi.
JavaScriptdagi Obyektlar
Ma'lumki, JavaScriptda sakkizta ma'lumot turi mavjud. Ulardan yettitasi "primitive" deb ataladi, chunki ularning qiymatlari faqat bitta narsani (masalan, string yoki son) o'z ichiga oladi.
Bundan farqli o'laroq, ob'ektlar turli ma'lumotlarning kalitlar orqali to'plamini va yanada murakkab entitylarni saqlash uchun ishlatiladi. JavaScriptda ob'ektlar tilning deyarli har bir jihatiga kirib boradi. Shuning uchun biz ularga chuqurroq o'rganishdan oldin ob'ektlarni tushunib olishimiz kerak.
Ob'ektni figural qavslar yordamida {...}
yaratish mumkin bo'lib, ixtiyoriy xususiyatlar ro'yxati mavjud bo'lishi mumkin. Xususiyat — bu "kalit: qiymat" juftligi bo'lib, kalit string (yoki "xususiyat nomi" deb ham ataladi) va qiymat esa har qanday narsa bo'lishi mumkin.
Ob'ektni fayllar bilan to'ldirilgan kabinet sifatida tasavvur qilishimiz mumkin. Har bir ma'lumot kabinet ichida kalit bo'yicha saqlanadi. Faylni nomi bilan osongina topish yoki fayl qo'shish/olib tashlash mumkin.
Bo'sh ob'ekt ("bo'sh kabinet") quyidagi ikki sintaksisdan biri bilan yaratilishi mumkin:
Odatda, {...}
figural qavslar ishlatiladi. Ushbu deklaratsiya ob'ekt literal deb ataladi.
Literallar va xususiyatlar
Biz {...}
ichiga "kalit: qiymat" juftliklari sifatida darhol ba'zi xususiyatlarni qo'shishimiz mumkin:
Xususiyat oldin ":"
dan oldin kalit (yoki "nom" yoki "identifikator" deb ham ataladi) va undan keyin qiymat mavjud bo'ladi.
user
ob'ektida ikkita xususiyat mavjud:
- Birinchi xususiyatning nomi "name" va qiymati "John".
- Ikkinchi xususiyatning nomi "age" va qiymati 30.
user
ob'ekti ichida ikki ta fayl yozuvlari bilan belgilangan kabinet sifatida tasavvur qilish mumkin.
Biz har qanday vaqtda fayllarni qo'shish, olib tashlash va o'qishimiz mumkin.
Xususiyat qiymatlari nuqta notatsiyasi yordamida kirish mumkin:
Qiymat har qanday turda bo'lishi mumkin. Keling, boolean qiymatini qo'shamiz:
Xususiyatni olib tashlash uchun delete
operatoridan foydalanishimiz mumkin:
Shuningdek, biz ko'p so'zli xususiyat nomlarini ishlatishimiz mumkin, lekin ular qo'shtirnoq ichida bo'lishi kerak:
Ro'yxatdagi oxirgi xususiyat vergul bilan tugashi mumkin:
Bu "trailing" yoki "hanging" vergul deb ataladi. Bu xususiyatlarni qo'shish/olib tashlash yoki ko'chirishni osonlashtiradi, chunki barcha qatorlar bir xil bo'ladi.
Kvadrat qavslar
Ko'p so'zli xususiyatlar uchun nuqta bilan kirish ishlamaydi:
JavaScript buni tushunmaydi. U user.likes
ga murojaat qilmoqchi bo'lib, keyin kutilmagan birds
so'ziga duch kelganda sintaksis xatosini chiqaradi.
Nuqta bilan kirish uchun kalit to'g'ri o'zgaruvchan identifikator bo'lishi kerak. Bu shuni anglatadiki: bo'shliqlarni o'z ichiga olmaydi, raqam bilan boshlanmaydi va maxsus belgilar ($
va _
ruxsat etiladi) kiritilmaydi.
Buning o'rniga, kvadrat qavsli notatsiya mavjud bo'lib, u har qanday string bilan ishlaydi:
Endi hamma narsa yaxshi. Iltimos, qavslar ichidagi string to'g'ri qo'shtirnoq ichida ekanligini unutmang (har qanday turdagi qo'shtirnoq ishlaydi).
Kvadrat qavslar shuningdek, xususiyat nomini har qanday ifoda natijasi sifatida olish imkonini beradi – literal string o'rniga – masalan, o'zgaruvchi orqali:
Bu yerda key
o'zgaruvchisi ish vaqti davomida hisoblanishi yoki foydalanuvchi kiritishiga bog'liq bo'lishi mumkin. Va keyin biz uni xususiyatga kirish uchun ishlatamiz. Bu bizga katta moslashuvchanlik beradi.
Masalan:
Nuqta bilan kirish shu kabi usulda ishlatilishi mumkin emas:
Hisoblangan xususiyatlar
Ob'ekt yaratishda kvadrat qavslarni ob'ekt literal ichida ishlatishimiz mumkin. Bu hisoblangan xususiyatlar deb ataladi.
Masalan:
Hisoblangan xususiyatning ma'nosi oddiy: [fruit]
degani xususiyat nomi fruit
dan olinishi kerak.
Shunday qilib, agar mehmon "apple" kiritsa, bag
{apple: 5}
bo'ladi.
Bu asosan quyidagi kabi ishlaydi:
... Lekin u chiroyliroq ko'rinadi.
Shuningdek, kvadrat qavslar ichida yanada murakkab ifodalarni ishlatishimiz mumkin:
Kvadrat qavslar nuqta bilan kirishga qaraganda ancha kuchliroq. Ular har qanday xususiyat nomlari va o'zgaruvchilarni qabul qiladi. Lekin ular yozish uchun ham ko'proq mehnat talab qiladi.
Shuning uchun, aksariyat hollarda xususiyat nomlari ma'lum va oddiy bo'lsa, nuqta bilan kirish ishlatiladi. Agar bizga biror narsani murakkabroq qilish kerak bo'lsa, biz kvadrat qavslarga o'tamiz.
Xususiyat qiymatlarini qisqartirish
Haqiqiy kodda, ko'pincha xususiyat nomlari uchun mavjud o'zgaruvchilar qiymat sifatida ishlatiladi.
Masalan:
Bu qisqartirilishi mumkin. Obyekt literalda xususiyat nomi va o'zgaruvchi nomi bir xil bo'lsa, name: name
qisqa name
sifatida yozilishi mumkin.
Shunday qilib, bizda:
Bunday "qisqartirilgan" xususiyatlar nomi qisqartirilgan xususiyatlar deyiladi. Ularni ishlatish juda keng tarqalgan, chunki kodni qisqa va ixcham qiladi.
Xususiyat nomlari cheklovlari
Xususiyat nomlari string yoki symbol bo'lishi kerak (symbol haqida keyinchalik gaplashamiz). Boshqa turdagi qiymatlar avtomatik ravishda stringga aylantiriladi.
Masalan, raqamlar avtomatik stringga aylantiriladi:
Bu kodda 0 va "0" xuddi shu kalit sifatida ko'rib chiqiladi.
Ammo, ko'pincha biz stringli kalitlarni ishlatamiz. Boshqa tomondan, raqamli xususiyatlar qatorlarni saqlashda qo'llaniladi.
"in" operatori
Ob'ekt xususiyatiga kirishga harakat qilganda, bu mavjud bo'lmasa undefined
qiymatini qaytaradi.
Misol uchun:
Shuni ham tekshirish mumkin, xususiyat mavjud yoki yo'qligini tekshirish uchun maxsus operator "key" in obj
mavjud.
Yuqoridagi misolda, natijalar faqat user.age
va user.blabla
mavjud yoki yo'qligini tekshirish uchun "age" va "blabla" kalitlarini taqqoslash orqali olinadi.
Agar biz biror xususiyat undefined
qiymatga ega bo'lsa, "in"
operatori buni farqlaydi:
Bu yerda obj.test
xususiyatiga undefined
qiymat berilgan. "in"
operatori buni "yo'q" deb qaytarmaydi, chunki u haqiqatan ham mavjud: uning qiymati undefined
.
for...in
loopi
Oddiy bo'lgan for
loopidan farqli ravishda, ob'ektlar uchun for...in
loopi mavjud bo'lib, u ob'ektning barcha kalitlarini olish imkonini beradi.
Uning umumiy sintaksisi quyidagicha:
Misol:
Tushuncha:
Obyektning xususiyatlari nuqta yoki kvadrat qavslar bilan kirish mumkin, kvadrat qavslar bizga ko'proq moslashuvchanlik beradi, lekin oddiy holda nuqta bilan kirish ishlatiladi.
Xususiyat nomi hisoblangan bo'lsa (yani dinamik bo'lsa), xususiyat nomini hisoblashga imkon beradigan kvadrat qavsli sintaksisni ishlatish kerak.
Xususiyat nomlari uchun kalitlar string yoki symbol bo'lishi kerak.
Xususiyat mavjudligini tekshirish uchun "in"
operatoridan foydalanish mumkin.
Xususiyatlarni o'qish yoki o'zgartirish uchun for...in
loopidan foydalanish mumkin.