Umumiy Tanishuv va Ta’riflar
JavaScript tiplarini ikki toifaga bo‘lish mumkin: primitiv tiplar va obyekt tiplari.
Primitiv tiplar
JavaScript’ning primitiv tiplariga sonlar, matnli satrlar (qisqacha satrlar deb ataladi) va mantiqiy haqiqat qiymatlari (mantiqiy qiymatlar deb ataladi) kiradi. Ushbu bobning salmoqli qismi JavaScript’dagi sonli (§3.2) va satrli (§3.3) tiplarning batafsil tushuntirilishiga bag‘ishlangan. Mantiqiy qiymatlar §3.4-bo‘limda ko‘rib chiqiladi.
null
va undefined
maxsus JavaScript qiymatlari ham primitiv qiymatlardir, lekin ular son, satr yoki mantiqiy qiymat emas. Odatda, bu qiymatlarning har biri o‘zining maxsus tipining yagona a’zosi hisoblanadi. §3.5-bo‘limda null
va undefined
haqida ko‘proq ma’lumot berilgan. ES6 tilga oldingi versiyalar bilan mos kelishlikka (backward compatibility) zarar yetkazmasdan kengaytmalar kiritish imkonini beruvchi, Symbol
deb nomlanuvchi yangi, maxsus maqsadli tipni qo‘shadi. Symbol
'lar haqida §3.6-bo‘limda qisqacha so‘z yuritiladi.
Obyekt tiplari
JavaScript’da son, satr, mantiqiy qiymat, symbol
, null
yoki undefined
bo‘lmagan har qanday qiymat obyekt hisoblanadi. Obyekt (ya’ni, object tipining a’zosi) — bu har bir xossasi nom va qiymatga (primitiv qiymat yoki boshqa bir obyektga) ega bo‘lgan xossalar to‘plamidir. Obyektlar ichida alohida o‘rin tutadigan global obyekt §3.7-bo‘limda ko‘rib chiqiladi, lekin obyektlar haqida umumiyroq va batafsilroq ma’lumotlar 6-bobda berilgan.
Oddiy JavaScript obyekti — bu nomlangan qiymatlarning tartiblanmagan to‘plamidir. Til, shuningdek, raqamlangan qiymatlarning tartiblangan to‘plamini ifodalovchi, massiv (array) deb nomlanuvchi maxsus obyekt turini ham o'zida mujassam etadi. JavaScript tili massivlar bilan ishlash uchun maxsus sintaksisdan foydalanadi va massivlar ularni oddiy obyektlardan ajratib turadigan ba’zi maxsus xususiyatlarga ega. Massivlar 7-bobning mavzusidir.
Asosiy obyektlar va massivlardan tashqari, JavaScript bir qator boshqa foydali obyekt tiplarini ham taqdim etadi. Set
obyekti qiymatlar to‘plamini ifodalaydi. Map obyekti kalitlardan qiymatlarga moslikni ifodalaydi. Turli “tiplashtirilgan massivlar” (typed array) baytlar va boshqa ikkilik ma’lumotlar massivlari ustida amallar bajarishni osonlashtiradi. RegExp
tipi matnli andozalarni ifodalaydi va satrlar ustida murakkab moslashtirish, qidirish va almashtirish amallarini bajarish imkonini beradi. Date
tipi sanalar va vaqtlarni ifodalaydi hamda sodda sana arifmetikasini qo‘llab-quvvatlaydi. Error
va uning quyi tiplari (subtypes) JavaScript kodini bajarish paytida yuzaga kelishi mumkin bo‘lgan xatoliklarni ifodalaydi. Bu tiplarning barchasi 11-bobda yoritilgan.
JavaScript’ni ko‘plab statik tillardan ajratib turadigan jihat shuki, unda funksiyalar va klasslar tilning quruq sintaktik qismi bo‘libgina qolmay, o‘zlari ham dastur boshqarishi mumkin bo‘lgan to‘laqonli qiymatlardir. Primitiv bo‘lmagan har qanday JavaScript qiymati singari, funksiyalar va klasslar ham obyektlarning ixtisoslashgan bir ko‘rinishidir. Ular haqida 8 va 9-boblarda batafsil so‘z yuritiladi.
Xotirani avtomatik boshqarish
JavaScript interpretatori xotirani boshqarish uchun keraksiz ma’lumotlarni avtomatik tozalash (garbage collection) mexanizmini ishga soladi. Bu shuni anglatadiki, JavaScript dasturchisi odatda obyektlar yoki boshqa qiymatlarni yo‘q qilish yoki xotiradan bo‘shatish haqida qayg‘urishiga hojat qolmaydi. Dastur biror qiymatga murojaat qilish imkoniyatini butunlay yo‘qotganda — ya’ni, qiymatga hech qanday "yo‘l" qolmaganda — interpretator bu qiymat endi hech qachon ishlatilmasligini anglaydi va u egallab turgan xotirani avtomatik tarzda qaytarib oladi. (Shunday bo‘lsa-da, JavaScript dasturchilari ba’zan qiymatlarning beixtiyor "ko‘z o‘ngida" qolib ketmasligini va shu sababli keragidan ortiq vaqt davomida xotiradan tozalash imkonsiz bo‘lib qolmasligini ta’minlashga e’tibor berishlari kerak bo‘ladi.)
Obyektga yo‘naltirilgan uslub
JavaScript obyektga yo‘naltirilgan dasturlash uslubini qo‘llab-quvvatlaydi. Sodda qilib aytganda, bu turli tiplardagi qiymatlar ustida amallar bajarish uchun global funksiyalar yaratish o‘rniga, tiplarning o‘zlari qiymatlar bilan ishlash uchun metodlarni taqdim etishini anglatadi. Masalan, a
massivining elementlarini saralash uchun biz a
massivini sort()
funksiyasiga uzatmaymiz. Buning o‘rniga, a
massivining o‘ziga tegishli sort()
metodini chaqiramiz
Metodlar ta'rifi batafsil 9-bobda yoritilgan. Texnik jihatdan faqat JavaScript obyektlarigina metodlarga ega bo‘ladi. Biroq sonlar, satrlar, mantiqiy qiymatlar va symbol
'lar ham xuddi metodlarga ega bo‘lgandek ishlaydi. JavaScript’da faqat null
va undefined
qiymatlari orqali metod chaqirib bo‘lmaydi.
Tiplarning o‘zgaruvchanligi (Mutability)
JavaScript'da obyekt tiplari o‘zgaruvchan (mutable), primitiv tiplari esa o‘zgarmas (immutable) xususiyatga ega. O‘zgaruvchan tipdagi qiymatning holatini o‘zgartirish mumkin: masalan, JavaScript dasturi obyekt xossalari yoki massiv elementlarining qiymatlarini o‘zgartira oladi. Sonlar, mantiqiy qiymatlar, symbol
'lar, null
va undefined
esa o‘zgarmasdir — masalan, biror sonning qiymatini o‘zgartirish haqida gapirishning o‘zi mantiqsiz.
Satrlarni belgilar massivi deb tasavvur qilish mumkin, shu sababli ularni o‘zgaruvchan deb kutishingiz tabiiy. Biroq JavaScript'da satrlar o‘zgarmasdir: siz satrning istalgan indeksidagi belgiga murojaat qila olasiz, lekin JavaScript mavjud satr matnini o‘zgartirish uchun hech qanday usulni taqdim etmaydi. O‘zgaruvchan va o‘zgarmas qiymatlar orasidagi farqlar §3.8-bo‘limda yanada chuqurroq yoritilgan.
Tiplarni avtomatik o‘zgartirish (konversiya)
JavaScript qiymatlarni bir tipdan boshqasiga juda osonlik bilan (liberally) o‘zgartiradi. Masalan, agar dastur satr kutayotgan joyda siz son bersangiz, u bu sonni siz uchun avtomatik tarzda satrga aylantirib beradi. Yoki agar mantiqiy qiymat kutilgan joyda mantiqiy bo‘lmagan qiymat ishlatsangiz, JavaScript uni mos ravishda o‘zgartirib oladi. Qiymatlarni o‘zgartirish qoidalari §3.9-bo‘limda tushuntirilgan. JavaScript'ning qiymatlarni erkin o‘zgartirish qoidalari uning tenglik tushunchasiga ham ta’sir qiladi va ==
tenglik operatori §3.9.1-bo‘limda tasvirlanganidek, tiplarni o‘zgartirish amallarini bajaradi. (Biroq amalda ==
tenglik operatori eskirgan hisoblanib, uning o‘rniga hech qanday tip o‘zgartirishini bajarmaydigan ===
qat’iy tenglik operatori tavsiya etiladi. Ikkala operator haqida batafsil ma’lumot uchun §4.9.1-bo‘limga qarang.)
Konstantalar va o‘zgaruvchilar
Konstantalar va o‘zgaruvchilar dasturlaringizda qiymatlarga nomlar orqali murojaat qilish imkonini beradi. Konstantalar const
yordamida, o‘zgaruvchilar esa let
(yoki eski JavaScript kodlarida var
) yordamida e’lon qilinadi. JavaScript konstantalari va o‘zgaruvchilari tiplashtirilmagan (untyped) hisoblanadi: ya’ni, ularni e’lon qilish paytida qanday tipdagi qiymat saqlanishi ko‘rsatilmaydi. O‘zgaruvchilarni e’lon qilish va ularga qiymat tayinlash §3.10-bo‘limda yoritilgan.
Ushbu uzun kirish qismidan ko‘rib turganingizdek, bu bob juda keng qamrovli bo‘lib, JavaScript'da ma’lumotlar qanday ifodalanishi va ular ustida qanday amallar bajarilishi haqidagi ko‘plab fundamental tafsilotlarni tushuntiradi. Keling, so‘zni ko‘p cho‘zmasdan, to‘g‘ridan-to‘g‘ri JavaScript sonlari va matnlarining tafsilotlariga sho‘ng‘iymiz.