Xossalarni tekshirish
JavaScript obyektlarini xossalar to'plami sifatida tasavvur qilish mumkin va ko'pincha to'plamga a'zolikni sinab ko'rish — ya'ni, obyektda berilgan nomdagi xossa mavjudligini tekshirish — foydalidir. Buni in operatori, hasOwnProperty() va propertyIsEnumerable() metodlari yordamida yoki shunchaki xossani so'rash orqali amalga oshirishingiz mumkin. Bu yerda ko'rsatilgan barcha misollar xossa nomlari sifatida satrlardan foydalanadi, lekin ular Symbol'lar (§6.10.3) bilan ham ishlaydi.
in operatori chap tomonida xossa nomini, o'ng tomonida esa obyektni kutadi. Agar obyektda shu nomdagi shaxsiy yoki meros qilib olingan xossa mavjud bo'lsa, u true qaytaradi:
let o = { x: 1 }; "x" in o // => true: `o` obyektida shaxsiy "x" xossasi bor "y" in o // => false: `o` obyektida "y" xossasi yo'q "toString" in o // => true: `o` obyekti `toString` xossasini meros qilib oladi
Obyektning hasOwnProperty() metodi o'sha obyektda berilgan nomdagi shaxsiy xossa mavjudligini tekshiradi. U meros qilib olingan xossalar uchun false qaytaradi:
let o = { x: 1 }; o.hasOwnProperty("x") // => true: `o` obyektida shaxsiy `x` xossasi bor o.hasOwnProperty("y") // => false: `o` obyektida `y` xossasi yo'q o.hasOwnProperty("toString") // => false: `toString` meros olingan xossa
propertyIsEnumerable() metodi hasOwnProperty() tekshiruvini yanada aniqlashtiradi. U faqat nomlangan xossa shaxsiy xossa bo'lsa va uning enumerable (sanab o'tiladigan) atributi true bo'lsagina true qaytaradi. Ba'zi ichki o'rnatilgan xossalar sanab o'tilmaydi. Oddiy JavaScript kodi orqali yaratilgan xossalar esa, agar siz ularni sanab o'tilmaydigan qilish uchun §14.1-bo'limda ko'rsatilgan usullardan birini ishlatmagan bo'lsangiz, sanab o'tiladigan bo'ladi.
let o = { x: 1 }; o.propertyIsEnumerable("x") // => true: `o` obyektida shaxsiy, sanaladigan `x` xossasi bor o.propertyIsEnumerable("toString") // => false: shaxsiy xossa emas Object.prototype.propertyIsEnumerable("toString") // => false: sanab o'tilmaydigan
in operatorini ishlatish o'rniga, ko'pincha shunchaki xossani so'rash va uning undefined emasligiga ishonch hosil qilish uchun !=='dan foydalanish yetarli bo'ladi:
let o = { x: 1 }; o.x !== undefined // => true: `o`da `x` xossasi bor o.y !== undefined // => false: `o`da `y` xossasi yo'q o.toString !== undefined // => true: `o` obyekti `toString` xossasini meros oladi
in operatorining oddiy xossaga murojaat qilish usulidan bitta muhim ustunligi bor: u xossaning umuman mavjud emasligi holatini xossaning mavjud, lekin qiymati undefined'ga tenglashtirilgan holatidan farqlay oladi. Ushbu kodni ko'rib chiqing:
let o = { x: undefined }; // Xossa aniq `undefined`ga o'rnatilgan o.x !== undefined // => false: xossa mavjud, lekin `undefined` o.y !== undefined // => false: xossa umuman mavjud emas "x" in o // => true: xossa mavjud "y" in o // => false: xossa mavjud emas delete o.x; // `x` xossasini o'chiramiz "x" in o // => false: u endi mavjud emas