🌝

Qisqa satrlarda JavaScript — 3. Oʻzgaruvchi, tip va ifodalar.

#JS

Qisqa satrlarda JavaScript — 3. Oʻzgaruvchi, tip va ifodalar

O‘zgaruvchilar

Indentifikatorga biriktirilgan literal o‘zgaruvchi deb ataladi, ulardan dasturning keyingi qismida foydalanishingiz mumkin.

JavaScriptda o‘zgaruvchilarga hech qanday tip biriktirilmaydi. Biron-bir tipdaqi qiymatni o‘zlashtirgandan so‘ng o‘zgaruvchiga boshqa tipdagi qiymatni bersangiz hech qanday xatolik yuz bermaydi va o‘zgaruchi yangi tipni o‘zlashtirib oladi. Shuning uchun JavaScriptni ba’zida tipizatsiyaga ega emas deyishadi. Ammo bu mutlaqo noto‘g‘ri, JavaScript tipizatsiyaga ega va u “dinamik tipizatsiya” qoidalari asosida ishlaydi.

O‘zgaruvchidan foydalanish uchun uni avval e’lon qilish kerak. JavaScriptda buni 3 xil usulda amalga oshirish mumkin: var, let yoki const kalit so‘zlari orqali. Bularning har biri turli maqsadlarda ishlatiladi.

var orqali e’lon qilish

ES2015 gacha var o‘zgaruchini e’lon qilishning yagona yo‘li bo‘lgan.

1
var a = 0

Agar var so‘zini qo‘yishni unutsangiz, siz e’lon qilinmagan o‘zgaruvchiga qiymat berayotgan bo‘lasiz va natija siz kutgandek bo‘lmaydi. Zamonaviy muhitlarda yoki strict rejimi yoqilgan bo‘lsa, yuqoridagi holatda xatolik yuz beradi. Eski muhitlarda (yoki strict rejimi o‘chirilgan bo‘lsa), o‘zgaruvchini initsializatsiya qiladi va global obyektga biriktirib qo‘yadi. Qo‘shimcha ma’lumot uchun, initsializatsiya — o‘zgaruvchiga dastlabki qiymatni o‘zashtirish jarayoni.

O‘zgaruvchini e’lon qilganda uni initsializatsiya qilmasangiz, u undefined qiymatini o‘zlashtiradi va unga yangi qiymat bermaguningizcha bu holatni saqlab turadi.

1
var a // typeof a === ‘undefined’

Bir o‘zgaruvchini bir necha marta e’lon qilishingiz mumkin, bunda oldingisi inkor qilinadi:

1
2
var a = 1
var a = 2

Bir qatorda bir nechta o‘zgaruvchilarni e’lon qilishingiz ham mumkin:

1
var a = 1, b = 2

Dasturlashda “scope” tushunchasi mavjud, o‘zbek tiliga ko‘rinish sohasi deb tarjima qilsak bo‘ladi (IMHO). Ko‘rinish sohasi deganda o‘zgaruvchi ko‘rinadigan va foydalansa bo‘ladigan dastur qismi tushuniladi.

Funksiyadan tashqarida var orqali e’lon qilingan o‘zgaruvchi global obyektga biriktiriladi va global ko‘rinish sohasiga ega bo‘ladi. Bunday o‘zgaruvchidan dasturning istalgan qismida foydalanishingiz mumkin. Agar var orqali funksiya ichida e’lon qilsangiz, o‘zgaruvchi funksiyaga biriktirladi va u faqat funksiya ichida ishlaydi, funksiya parametri kabi.

Agar funksiya ichida global obyektdagi o‘zgaruvchi bilan bir xil nomdagi o‘zgaruvchi e’lon qilsangiz, funksiya ichidagi ustunlikka ega bo‘ladi va global o‘zgaruvchini inkor qilib yuboradi.

Shuni ta’kidlash muhimki, { } qavslar bilan ajratilgan blok yaratganiz bilan ko‘rinish sohasi (scope) yaratilmaydi. Funksiya yaratganingizdagina ko‘rinish sohasi yaratiladi, chunki var blok ko‘rinish sohasiga ega emas, balki funksiyaviy ko‘rinish sohaga ega.

Funksiya ichida e’lon qilingan o‘zgaruvchi funksiya bo‘ylab istalgan joyda ishlatilishi mumkin. Hattoki, funksiya ohirida e’lon qilsangiz ham funksiya boshida undan foydalanish mumkin, chunki JavaScript kodni bajarishdan oldin barcha o‘zgaruvchilarni yuqoriga ko‘chiradi. Lekin chalg‘ib ketmaslik uchun o‘zgaruvchini funksiya boshida e’lon qilganingiz ma’qul.

let orqali e’lon qilish

Yuqorida aytganimizdek, var blok ko‘rinish sohasiga ega emas. Bu muammoni hal qilish uchun ES2015 da let qo‘shilgan. let orqali e’lon qilngan o‘zgaruvchining ko‘rinish sohasi faqat o‘zi e’lon qilgan blokka hamda undagi ichki bloklargagina tegishli.

Zamonaviy dasturchilar, asosan, let dangina foydalanishmoqda, va var dan butunlay voz kechishmoqda.

Yana bir farqi, funksiya tashqarisida let orqali e’lon qilganizda, var dan farqli o‘laroq o‘zgaruvchini global o‘zgaruvchiga aylantirmaydi.

const orqali e’lon qilish

var yoki let yordamida e’lon qilingan o‘zgaruvchilar keyinchalik qiymatini o‘zgartirishi mumkin. const da e’lon qilingan o‘zgaruvchi initsializatsiya qilingandan keyin boshqa o‘zgarmaydi va uning qiymati o‘zgarmas qiymatga aylanadi, ya’ni konstantaga.

1
const a = test

const ga istalgan literalni biriktirish mumkin. Yana bir jihati: agar konstantaga obyekt biriktirilgan bo‘lsa, undagi funksiyalari orqali obyekt qiymatlarini o‘zgartirsa bo‘ladi.

const ko‘rsatkichni o‘zgartirmaslikni ta’minlaydi. Shuningdek, let kabi blok ko‘rinish sohasiga ega.

Zamonaviy dasturchilar dastur davomida o‘zgarmaydigan o‘zgaruvchilarni const da e’lon qilishni ma’qul ko‘rishadi, chunki bu keyiknchalik uchrashi mumkin bo‘lgan xatoliklarni oldini oladi.

Tiplar

Siz JavaScriptni tipizatsiyaga ega emas deb eshitgan bo’lishingiz mumkin. Oldin ham ta’kidlaganimdek, bu mutlaqo noto’g’ri. JavaScript tipizatsiyaga ega, va aynan “dinamik tipizatsiya” xususiyatida ishlaydi. Bu degani, siz bir o’zgaruvchiga istalgan turdagi tipni o’zlashtirishingiz mumkin. JavaScriptda ikki xil tiplar mavjud: oddiy va murakkab tiplar.

Oddiy tiplar

Oddiy tiplarga quyidagilar kiradi:

Sonlar

JavaScriptda sonlarning faqat bir turi mavjud, bu ham bo’lsa haqiqiy sonlardir.

Sonli literallar raqam ko’rinishida dasturda yoziladi va qanday yozilishiga qarab butun yoki haqiqiy sondagi literal bo’lishi mumkin.

Butun sonlar:

1
2
3
20
546984621654984
0xCC // 16 lik son

Haqiqiy sonlar:

1
2
3
3.14
.1234
5.2e4

Qatorlar

Qator bu belgilar ketma-ketligidir. Dastur kodida qator literali orqali ifodalanadi va qo’shtirnoq — “” yoki tirnoq ‘’ belgilari bilan yopiladi.

1
2
qator
matn

JavaScriptda qatorlarni bir necha qatorda ifodalash uchun \ belgidan foydalaniladi.

1
2
Hammasi bir \
qator

Shuningdek, \ belgidan qator orasida ‘’ yoki “” dan foydalanish uchun qo’llash mumkin. Bu yuqoridagi belgilarni qatorni ochib-yopuvchi begilardan ajratib turadi.

1
O\’zbekiston

Qatorlar + operatori orqali birikishi mumkin.

Qator shabloni

ES2015 da qo’shilgan bo’lib, qatorlar bilan ishlashda yangi imkoniyatlar taqdim etadi.

Qatorda ${ } orasiga ifoda berib, shablon yaratib ketish mumkin. Masalan, shablonlarsiz:

1
2
3
4
var a = 5
var b = 10
console.log(Ko\’paytma  + (a * b) +  ga teng.)
// Ko’paytma 50 ga teng

Xuddi shuni shablondan foydalanib yozamiz:

1
2
3
4
var a = 5 
var b = 10
console.log(Ko\’paytma ${a * b} ga teng. 
// Ko’paytma 50 ga teng

Mantiqiy tip

JavaScript mantiqiy tiplarni ifodalash uchun true yoki false kalit so’zlaridan foydalanadi. Taqqoslash operatorlari (===, ==, <, >) yuqoridagi ikkisidan birini natija sifatida qaytaradi.

if, while kabi tekshiruvchi operatorlar dastur jarayonida mantiqiy tiplardan foydalanadi.

Mantiqiy qiymat ifodani faqat aniq rost yoki yolg’onligida emas, balki rostr yoki yolg’onga yaqin ekanligiga qarab ham aniqlab oladi. Masalan, quyidagi qiymatlarning barchasi yolg’onga yaqin bo’lgani uchun false qiymati olinadi:

1
2
3
4
5
6
0
-0
NaN
undefined
null
‘’ // bo’sh qator

Qolgan barcha holatlarda true olinadi.

null

null hech qanday qiymat yo’qligini bildiruvchi maxsus qiymat.

Bu qiymat deyarli barcha dasturlash tillarida uchraydi. Masalan Pythonda None shaklida uchraydi.

undefined

undefined o’zgaruvchini initsializatsiya qilinmaganligi va qiymat noaniq ekanligini bildiradi.

Funksiyaning qaytaruvchi qiymati bo’lmaganda undefined qaytaradi. Shuningdek, funksiya parametri mavjud bo’lsa, lekin funksiya chaqirilganda unga qiymat yuborilmasa, funksiya parametrlarni undefined holatiga o’tkizadi.

Qiymatni undefined ekanligi quyidagicha tekshiriladi:

1
typeof var === undefined

Murakkab tiplar

Yuqorida sanab o’tilgan tiplardan boshqa hammasi murakkab tiplar hisoblanadi. Bular funksiyalar, massivlar va obyektlar. Har birining o’ziga xos jihatlari bor, shuningdek ular obyektni xususiyatlariga ham egalik qiladi.

Ifodalar

Dasturiy kodning yangi qiymat yaratuvchi qismi ifoda deb ataladi.

JavaScriptda ifodalarni bir necha turlari mavjud.

Arifmetik ifodalar

Sonlarni hisoblashda foydalaniluvchi ifodalar kiradi:

1
2
3
4
1 / 2
i++
i -= 2
i * 2

Qator ifodalari

Qatorlar ustida bajariladigan ifodalar

1
2
Bu  + qator
s += qator

Birlamchi ifodalari

Bu turga ko’rsatkichlar, literallar va konstantalar kiradi:

1
2
3
4
5
6
7
6
2.06
bu nimadir
true
this //joriy obyekt
undefined
i

Shuningdek, ba’zi kalit so’zlari

1
2
3
4
5
6
7
8
function
class
function* //funksiya generatori
yield
yield* //boshqa generator yoki iteratorga yo’naltiradi
async function* //asinxron funksiya ifodasi
await 
() //guruhlash

Massiv va obyekt initsializatsiya ifodalari

1
2
3
4
5
[] //array literal
{} //
[1, 2, 3]
{a: 1, b: 2}
{a: {b: 1}}

Mantiqiy ifodalar

Mantiqiy ifodalar operatorlar yordamida mantiqiy qiymatni hosil qiladi

1
2
3
a && b
a || b
!a

Chap-tomon ifodalari

1
2
3
new // konstruktordan yangi model yaratadi
super // ota konstruktorni chaqiradi
obj

Xususiyatga murojat ifodalari

1
2
3
object.property
object[property]
object[property]

Obyekt yaratish ifodalari

1
2
new object()
new a(1)

Funksiya ta’rifi ifodalari

1
2
3
4
5
function() {}
function(a, b) { return a * b }
(a, b) => a * b
a => a * 5
() => { return 5 }

Funksiya chaqiruv ifodalari

1
2
a.x(5)
window.resize()

Bu ma’lumotlar sizlarni qo’rqitib yubormasin, yana. Maqolaning keyingi qismlarida yuqoridagi ifodalarning har biriga alohida to’xtalib o’tishga harakat qilamiz.