Obyektni primitivga o'girish
Obyektlar arifmetik yoki satr operatsiyalarida ishtirok etganda avtomatik ravishda primitivga o'giriladi. Bu darsda o'girish qanday sodir bo'lishini va uni qanday boshqarishni o'rganamiz.
Nima uchun kerak?
obj1 + obj2 yoki obj1 - obj2 qilsak nima bo'ladi? Bunday holda JavaScript obyektlarni avtomatik primitivga o'giradi, so'ng operatsiyani bajaradi. Natijada har doim primitiv qiymat (satr yoki son) chiqadi.
Hint ("ishora") tushunchasi
O'girish qanday amalga oshishi hint โ ya'ni kutilayotgan qiymat turiga bog'liq. Uch xil hint bor:
"string"โ satr kutilganda (masalan,alert(obj), kalit sifatidaobj[obj2]);"number"โ son kutilganda (arifmetika, taqqoslash,Mathfunksiyalari);"default"โ tur aniq bo'lmaganda (masalan, ikkilik+, yoki==bilan taqqoslash).
+ operatori "default" hintni ishlatadi, chunki u ham sonlarni qo'shishi, ham satrlarni birlashtirishi mumkin. Deyarli barcha o'rnatilgan obyektlar (Datedan tashqari) "default"'ni "number" kabi qabul qiladi.O'girish algoritmi
O'girishni bajarish uchun JavaScript quyidagi uchta metodni shu tartibda qidiradi va topilganini chaqiradi:
obj[Symbol.toPrimitive](hint)โ agar bunday metod mavjud bo'lsa;- Aks holda, hint
"string"bo'lsa โobj.toString(), keyinobj.valueOf(); - Aks holda (hint
"number"yoki"default") โobj.valueOf(), keyinobj.toString().
Bu metodlar primitiv qaytarishi kerak. Agar obyekt qaytarsa โ natija e'tiborsiz qoldiriladi (go'yo metod umuman yo'q edi).
Symbol.toPrimitive
Eng zamonaviy va to'liq usul โ obyektda Symbol.toPrimitive nomli tizimli metodni belgilash. U barcha o'girish holatlarini yagona joyda boshqaradi va hint'ni argument sifatida oladi:
Ko'ryapmizki, bitta metod hintga qarab turli natija qaytardi: String(user) satr oldi, +user son oldi, user + 500 esa default hint bilan sonni tanladi.
toString va valueOf
Symbol.toPrimitive bo'lmasa, JavaScript eskiroq โ toString va valueOf metodlariga murojaat qiladi. Ular hint olmaydi, lekin turli holatlarda chaqiriladi:
Amaliyotda ko'pincha faqat bitta toString() metodini yozish yetarli โ u "hammabop" bo'lib, barcha o'girishlarni satr ko'rinishida boshqaradi (agar valueOf bo'lmasa, u ham chaqiriladi):
toString() metodi "[object Object]" qaytaradi, valueOf() esa obyektning o'zini qaytaradi (ya'ni primitiv emas, shuning uchun e'tiborsiz).Operatorlarda o'girish
Endi turli operatorlar qaysi hintni chaqirishini ko'raylik:
E'tibor bering: obj + "x"'da + avval obyektni default hint bilan primitiv (2) qildi, so'ng 2 + "x" satr birlashtiruvi "2x"'ga aylandi. Ya'ni o'girish natijasi primitiv bo'lgach, operatorning oddiy qoidalari amal qiladi.
"string" hint majburan satr qaytishini talab qilmaydi, "number" ham majburan son emas. Faqat bitta qat'iy qoida: metodlar obyekt emas, primitiv qaytarishi shart.Xulosa
- Obyekt primitiv kutilgan operatsiyada avtomatik o'giriladi va natija har doim primitiv bo'ladi;
- O'girish
hint'ga bog'liq:"string","number"yoki"default"; - JavaScript avval
Symbol.toPrimitive'ni, keyintoString/valueOf'ni qidiradi; Symbol.toPrimitiveโ hintni oluvchi, barcha holatlarni boshqaruvchi zamonaviy usul;- Ko'p hollarda faqat
toString()metodini yozish yetarli โ u universal o'girishni ta'minlaydi.