JavaScript bizga ibtidoiylar (matnlar, raqamlar va boshqalar) bilan xuddi obyektlar kabi ishlashga imkon beradi.
Ular, shuningdek, chaqirish qilish usullarini taqdim etadilar. Biz ularni yaqinda oârganib chiqamiz, lekin avval uning qanday ishlashini bilib olamiz, chunki, albatta, ibtidoiylar obyekt emas (va bu yerda biz buni yanada aniqroq qilamiz).
Keling, ibtidoiylar va obyektlar oârtasidagi asosiy farqlarni koârib chiqaylik.
Ibtidoiylar
- Ibtidoiy turdagi qiymatdir.
- 6 ta ibtidoiy tur mavjud:
string,number,boolean,symbol,nullvaundefined.
Obyektlar
- Bir nechta qiymatlarni xususiyat sifatida saqlashga qodir.
{}bilan yaratilishi mumkin, masalan:{name:" John ", age: 30}. JavaScript-da boshqa turdagi obyektlar mavjud; funktsiyalar, masalan, obyektlardir.
Obyektlarning eng yaxshi tomonlaridan biri shundaki, biz funktsiyani uning xususiyatlaridan biri sifatida saqlashimiz mumkin.
let john = {
name: "John",
sayHi: function () {
alert("Salom do'stim!");
},
};
john.sayHi(); // Salom do'stim!
Shunday qilib, biz sayHi usuli bilan john obyektini yaratdik.
Koâpgina tilning ichida oârnatilgan obyektlar allaqachon mavjud, masalan, sanalar, xatolar, HTML elementlar va boshqalar bilan ishlaydi, ular turli xil xususiyatlarga va usullarga ega.
Biroq, bu imkoniyatlarning salbiy tomoni bor!
Obyektlar ibtidoiylarga qaraganda âogâirroqâ. Ular ichki texnikani qoâllab-quvvatlash uchun qoâshimcha manbalarni talab qiladi. Ammo xususiyatlar va usullar dasturlashda juda foydali boâlganligi sababli, JavaScript interpretatori qoâshimcha yukni kamaytirish uchun ularni optimallashtirishga harakat qiladi.
Obyekt sifatida ibtidoiy
JavaScript-ni yaratuvchisi duch kelgan paradoks:
- Matn yoki raqam kabi ibtidoiylar bilan ishlashni istagan juda koâp narsa bor. Agar ular bilan usullar orqali ishlashimiz mumkin boâlsa, bu ajoyib boâlar edi.
- Ibtidoiylar imkon qadar tez va yengil boâlishi kerak.
Yechim biroz noqulay koârinadi, ammo bu yerda:
- Ibtidoiylar hali ham ibtidoiy. Istalgandak, bitta qiymat.
- Til matnlar, raqamlar, mantiqiy turdagi qiymatlar va belgilarning usullari va xususiyatlariga kirishga imkon beradi.
- Bu sodir boâlganda, qoâshimcha funktsiyalarni taâminlaydigan maxsus âoâralish-obyektiâ yaratiladi va keyin yoâq qilinadi.
âOâralish-obyektiâ har bir ibtidoiy tur uchun har xil va ular quyidagicha nomlanadi: String, Number, Boolean va Symbol. Shunday qilib, ular turli xil usullar toâplamini taqdim etadilar.
Masalan, str.toUpperCase() usuli mavjud , bu tepa registr matni qaytaradi.
Bu shunday ishlaydi:
let str = "Salom";
alert(str.toUpperCase()); // SALOM
Oddiy, toâgârimi? Mana aslida nima str.toUpperCase() da sodir boâladi:
strmatni bu ibtidoiy. Shunday qilib, uning xususiyatiga kirish vaqtida matn qiymatini biladigan vatoUpperCase()kabi foydali usullarga ega boâlgan maxsus obyekt yaratiladiâ¦- Ushbu usul ishlaydi va yangi matni qaytaradi (
alerttomonidan qaytarilgan). stribtidoiy yolgâiz qoldirib, maxsus obyekt yoâq qilinadi.
Shunday qilib, ibtidoiylar usullarni taâminlashi mumkin, ammo ular hali ham yengil boâlib qolmoqda.
JavaScript interpretatori ushbu jarayonni yuqori darajada optimallashtiradi. Hatto qoâshimcha obyektni yaratishni umuman oâtkazib yuborishi mumkin. Ammo u hali ham spetsifikatsiyaga rioya qilishi va obyektni yaratganday tutishi kerak.
Raqamning oâziga xos usullari mavjud, masalan, toFixed (n) raqamni berilgan aniqlikka yaxlitlaydi
let n = 1.23456;
alert(n.toFixed(2)); // 1.23
Info:number va Satrlar boblarida koâproq usullarni koârib chiqamiz.
String/Number/Booleankonstruktorlari faqat ichki foydalanish uchun moâljallanganJava kabi baâzi tillarnew Number(1)yokinew Boolean(false) kabi sintaksis yordamida ibtidoiylar uchun âoâralish-obyektiniâ yaratishga imkon beradi.
JavaScript-da, bu tarixiy sabablarga koâra mumkin, ammo juda tavsiya etilmaydi. Bir nechta joylarda ishlar chalkashib ketadi.
Masalan:
alert(typeof 0); // "number"
alert(typeof new Number(0)); // "object"!
Va bundan keyin zero obyekt boâlganligi sababli ogohlantirish paydo boâladi:
let zero = new Number(0);
if (zero) {
// zero bu true, chunki u obyekt
alert("nol - bu to'g'rimi?!?");
}
Boshqa tomondan, xuddi shu String/Number/Boolean funktsiyalaridan new dan foydalanish umuman foydali narsadir. Ular qiymatni tegishli turga oâzgartiradilar: matnga, raqamga yoki mantiqiy qiymatga(ibtidoiy).
Misol uchun, quyidagi butunlay joizdir:
let num = Number("123"); // matni raqamga aylantirish
null va undefined ning maxsus ibtidoylari istisnolardir. Ularda tegishli âoâralish-obyektlariâ yoâq va ular hech qanday usulga ega emas. Bir maânoda, ular âeng ibtidoiyâ.
Bunday qiymat xususiyatiga kirishga urinish xatoga yoâl qoâyadi:
alert(null.test); // xato
Xulosa
nullvaundefineddan tashqari ibtidoiylar koâplab foydali usullarni taqdim etadi. Kelgusi boblarda ularni oârganamiz.- Rasmiy ravishda, bu usullar vaqtinchalik obyektlar bilan ishlaydi, lekin JavaScript interpretatori bu jarayonni juda yaxshi optimallashtiradi, shuning uchun ularning chaqiruvi juda koâp resurslarni talab qilmaydi.
Izohlar
<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â¦)