JavaScript bizga ibtidoiylar (matnlar, raqamlar va boshqalar) bilan xuddi obyektlar kabi ishlashga imkon beradi.
Ular, shuningdek, chaqirish qilish usullarini taqdim etadilar. Biz ularni yaqinda organib 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 ortasidagi asosiy farqlarni korib 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.
Kopgina tilning ichida ornatilgan 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 ogirroq. Ular ichki texnikani qollab-quvvatlash uchun qoshimcha manbalarni talab qiladi. Ammo xususiyatlar va usullar dasturlashda juda foydali bolganligi sababli, JavaScript interpretatori qoshimcha 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 kop narsa bor. Agar ular bilan usullar orqali ishlashimiz mumkin bolsa, bu ajoyib bolar edi.
- Ibtidoiylar imkon qadar tez va yengil bolishi kerak.
Yechim biroz noqulay korinadi, 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 bolganda, qoshimcha funktsiyalarni taminlaydigan maxsus oralish-obyekti yaratiladi va keyin yoq qilinadi.
Oralish-obyekti har bir ibtidoiy tur uchun har xil va ular quyidagicha nomlanadi: String, Number, Boolean va Symbol. Shunday qilib, ular turli xil usullar toplamini taqdim etadilar.
Masalan, str.toUpperCase() usuli mavjud , bu tepa registr matni qaytaradi.
Bu shunday ishlaydi:
let str = "Salom";
alert(str.toUpperCase()); // SALOM
Oddiy, togrimi? Mana aslida nima str.toUpperCase() da sodir boladi:
strmatni bu ibtidoiy. Shunday qilib, uning xususiyatiga kirish vaqtida matn qiymatini biladigan vatoUpperCase()kabi foydali usullarga ega bolgan maxsus obyekt yaratiladi- Ushbu usul ishlaydi va yangi matni qaytaradi (
alerttomonidan qaytarilgan). stribtidoiy yolgiz qoldirib, maxsus obyekt yoq qilinadi.
Shunday qilib, ibtidoiylar usullarni taminlashi mumkin, ammo ular hali ham yengil bolib qolmoqda.
JavaScript interpretatori ushbu jarayonni yuqori darajada optimallashtiradi. Hatto qoshimcha obyektni yaratishni umuman otkazib yuborishi mumkin. Ammo u hali ham spetsifikatsiyaga rioya qilishi va obyektni yaratganday tutishi kerak.
Raqamning oziga 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 koproq usullarni korib chiqamiz.
String/Number/Booleankonstruktorlari faqat ichki foydalanish uchun moljallanganJava kabi bazi tillarnew Number(1)yokinew Boolean(false) kabi sintaksis yordamida ibtidoiylar uchun oralish-obyektini yaratishga imkon beradi.
JavaScript-da, bu tarixiy sabablarga kora 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 bolganligi sababli ogohlantirish paydo boladi:
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 ozgartiradilar: 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 oralish-obyektlari yoq va ular hech qanday usulga ega emas. Bir manoda, ular eng ibtidoiy.
Bunday qiymat xususiyatiga kirishga urinish xatoga yol qoyadi:
alert(null.test); // xato
Xulosa
nullvaundefineddan tashqari ibtidoiylar koplab foydali usullarni taqdim etadi. Kelgusi boblarda ularni organamiz.- Rasmiy ravishda, bu usullar vaqtinchalik obyektlar bilan ishlaydi, lekin JavaScript interpretatori bu jarayonni juda yaxshi optimallashtiradi, shuning uchun ularning chaqiruvi juda kop 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)