Primitivlarning metodlari

...

Primitivlarning metodlari

JavaScript primitivlar (string, number va boshqalar) bilan ob'ektlar kabi ishlashga imkon beradi. Ular, shuningdek, metodlarni chaqirish imkonini beradi. Biz tez orada ularni o'rganamiz, lekin avval qanday ishlashini ko'rib chiqamiz, chunki primitivlar ob'ektlar emas (va bu yerda biz buni yanada aniqroq ko'rsatamiz).

Asosiy farqlar

  • Primitiv turdagi qiymatdir.
  • 7 ta primitiv tur mavjud: string, number, bigint, boolean, symbol, null va undefined.
  • Bir nechta qiymatlarni xususiyatlar sifatida saqlay oladi.
  • {} bilan yaratilishi mumkin, masalan: {name: "John", age: 30}. JavaScriptda boshqa ob'ekt turlari ham mavjud: masalan, funksiyalar ob'ektlardir.
  • Ob'ektlarning eng yaxshi xususiyatlaridan biri shundaki, biz funktsiyani uning xususiyatlaridan biri sifatida saqlay olishimiz mumkin.
  let john = {
    name: 'John',
    sayHi: function () {
      alert("Salom, do'stim!");
    },
  };
 
  john.sayHi(); // Salom, do'stim!

Bu yerda biz john ob'ektini sayHi metodi bilan yaratdik.

Ko'plab o'rnatilgan ob'ektlar mavjud, masalan, sanalar, xatoliklar, HTML elementlari bilan ishlovchi ob'ektlar. Ular turli xususiyatlar va metodlarga ega.

Lekin, bu imkoniyatlar narx bilan keladi!

Ob'ektlar primitivlardan “og'irroq”. Ular ichki mexanizmni qo'llab-quvvatlash uchun qo'shimcha resurslarni talab qiladi.

Primitiv ob'ekt sifatida

JavaScript yaratishchisi duch kelgan paradoks:

Ko'p narsalarni primitiv bilan qilishni xohlasangiz, masalan, string yoki number. Ularni metodlar orqali foydalanish juda yaxshi bo'lar edi. Primitivlar imkon qadar tez va yengil bo'lishi kerak. Yecha olish bir oz g'alati ko'rinadi, lekin mana bu:

  • Primitivlar hali ham primitivdir. Yagona qiymat, xohlaganidek.
  • Til string, number, boolean va symbol'lar uchun metodlarga kirishni ta'minlaydi.
  • Buning ishlashi uchun, maxsus “ob'ekt qopqog'i” yaratiladi, qo'shimcha funksiyalarni taqdim etadi va keyin yo'q qilinadi.

“Ob'ekt qopqog'lari” har bir primitiv tur uchun turlicha bo'lib, ular: String, Number, Boolean, Symbol va BigInt deb ataladi. Shu sababli, ular turli metodlar to'plamlarini taqdim etadi.

Masalan, str.toUpperCase() metod mavjud bo'lib, stringni katta harflar bilan qaytaradi.

Mana bu qanday ishlaydi:

let str = 'Salom';
 
alert(str.toUpperCase()); // SALOM

Oddiy, ha? Mana str.toUpperCase() da aslida nima bo'ladi:

  • str string primitivdir. Shunday qilib, uning xususiyatiga kirish vaqtida, string qiymatini biladigan va foydali metodlarga ega maxsus ob'ekt yaratiladi, masalan toUpperCase().
  • Ushbu metod ishlaydi va yangi stringni qaytaradi (alert orqali ko'rsatiladi).
  • Maxsus ob'ekt yo'q qilinadi, primitiv str yolg'iz qoladi.

Shunday qilib, primitivlar metodlarni taqdim etishi mumkin, ammo ular hali ham yengil bo'lib qoladi.

JavaScript dvigateli bu jarayonni yuqori darajada optimallashtiradi. Hatto qo'shimcha ob'ekt yaratishni o'tkazib yuborishi mumkin. Lekin, spetsifikatsiyaga rioya qilishi kerak va bunday ob'ekt yaratgandek ishlashi kerak.

Sonlarda o'z metodlari mavjud, masalan toFixed(n) sonni berilgan aniqlikda yaxlitlaydi:

let n = 1.23456;
 
alert(n.toFixed(2)); // 1.23

Maxsus metodlarni "Numbers" va "Strings" bo'limlarida ko'rib chiqamiz.

String/Number/Boolean konstruktorlari faqat ichki foydalanish uchun

Ba'zi tillarda, masalan Java, primitivlar uchun maxsus “qopqoq ob'ektlar” yaratish imkoniyati mavjud: new Number(1) yoki new Boolean(false) sintaksisi orqali.

JavaScriptda ham tarixiy sabablar bilan buni amalga oshirish mumkin, ammo bu qat'iyan tavsiya etilmaydi. Bir qancha joylarda ishlash xatoliklari yuzaga keladi.

Masalan:

alert(typeof 0); // "number"
 
alert(typeof new Number(0)); // "object"!

Ob'ektlar har doim if da haqiqiy bo'ladi, shuning uchun alert paydo bo'ladi:

let zero = new Number(0);
 
if (zero) {
  // zero haqiqiy, chunki bu ob'ekt
  alert('zero haqiqiy!?!');
}

Boshqa tomondan, String/Number/Boolean funksiyalaridan new ishlatmasdan foydalanish mutlaqo to'g'ri va foydalidir. Ular qiymatni tegishli turga konvertatsiya qiladi: string, number yoki boolean (primitiv).

Masalan, bu mutlaqo to'g'ri:

let num = Number('123'); // stringni number ga konvertatsiya qiladi

Null/undefined metodlari yo'q

Maxsus primitivlar null va undefined istisnolar hisoblanadi. Ularning mos “qopqoq ob'ektlari” mavjud emas va hech qanday metodlarni taqdim etmaydi. Bir ma'noda, ular “eng primitiv” hisoblanadi.

Bunday qiymatning xususiyatiga kirishga urinish xato beradi:

alert(null.test); // xato

Xulosa

Primitivlar null va undefined tashqari ko'plab foydali metodlarni taqdim etadi. Biz bu metodlarni kelgusi bo'limlarda o'rganamiz.

Rasmiy ravishda, bu metodlar vaqtincha ob'ektlar orqali ishlaydi, lekin JavaScript dvigatellari bu jarayonni ichki ravishda optimallashtiradi, shuning uchun ularni chaqirish qimmatga tushmaydi.

Ushbu sahifada

GitHubda tahrirlash