JavaScript asoslari

Mantiqiy operatorlar

JavaScript'da uchta mantiqiy operator bor: || (YOKI), && (VA) va ! (EMAS). Ular "mantiqiy" deb atalsa-da, aslida istalgan turdagi qiymatlarga qo'llaniladi va natija sifatida ham istalgan turdagi qiymat qaytarishi mumkin. Keling, chuqur o'rganamiz.

|| (YOKI)

Ikki operandli oddiy holatda || agar operandlardan hech bo'lmaganda bittasi true bo'lsa, true qaytaradi:

yoki-oddiy.js
// natija shu yerda chiqadi

Agar operand boolean bo'lmasa, u tekshirish uchun boolean'ga o'giriladi:

yoki-if.js
// natija shu yerda chiqadi

|| birinchi truthy qiymatni topadi (short-circuit)

Endi || ning JavaScript'ga xos kuchli xususiyatini ko'ramiz. U shunday ishlaydi:

  1. Operandlarni chapdan o'ngga baholaydi;
  2. Har birini boolean'ga o'giradi. Agar natija true bo'lsa โ€” to'xtaydi va o'sha operandning asl (o'girilmagan) qiymatini qaytaradi;
  3. Agar barcha operandlar false bo'lsa โ€” oxirgi operandni qaytaradi.

Ya'ni || boolean emas, balki birinchi truthy qiymatni yoki barchasi falsy bo'lsa โ€” oxirgisini qaytaradi:

yoki-qiymat.js
// natija shu yerda chiqadi

Bu xususiyatning amaliy qo'llanishi โ€” ro'yxatdan birinchi "to'ldirilgan" qiymatni tanlash:

yoki-default.js
// natija shu yerda chiqadi
|| zanjiri qiymatlarni chapdan o'ngga tekshiradi. Bo'sh matn va null falsy bo'lgani uchun ular o'tkazib yuboriladi, birinchi truthy qiymat โ€” "SuperUser" tanlanadi.

Qisqa tutashuv (short-circuit evaluation)

|| ning yana bir xususiyati โ€” qisqa tutashuv. Chapdagi operand truthy bo'lsa, o'ngdagisi umuman baholanmaydi. Bu, agar operandda funksiya chaqiruvi yoki qo'shimcha ta'sir (side effect) bo'lsa, muhim:

short-circuit-yoki.js
// natija shu yerda chiqadi
Qisqa tutashuvni amal bajarish uchun if o'rniga ishlatish mumkin, lekin bu kodni o'qishni qiyinlashtiradi. Amallar uchun if, qiymat tanlash uchun || dan foydalaning.

&& (VA)

&& operatori oddiy holatda ikkala operand ham true bo'lgandagina true qaytaradi:

va-oddiy.js
// natija shu yerda chiqadi

&& birinchi falsy qiymatni topadi

&& ham xuddi || kabi qiymat qaytaradi, lekin teskarisicha ishlaydi:

  1. Operandlarni chapdan o'ngga baholaydi;
  2. Har birini boolean'ga o'giradi. Agar natija false bo'lsa โ€” to'xtaydi va o'sha operandning asl qiymatini qaytaradi;
  3. Agar barcha operandlar truthy bo'lsa โ€” oxirgisini qaytaradi.

Ya'ni && birinchi falsy qiymatni, yoki hech biri falsy bo'lmasa โ€” oxirgisini qaytaradi:

va-qiymat.js
// natija shu yerda chiqadi
&& ustuvorligi || dan yuqori. Shuning uchun a || b && c aslida a || (b && c) deb hisoblanadi. Chalkashlikdan qochish uchun murakkab ifodalarda qavs ishlating.

! (EMAS)

! operatori bitta operandga qo'llaniladi va quyidagicha ishlaydi:

  1. Operandni boolean'ga o'giradi: true / false;
  2. Uning teskarisini qaytaradi.
emas.js
// natija shu yerda chiqadi

Ikki marta !! qo'llash โ€” qiymatni boolean'ga o'girishning keng tarqalgan usuli (xuddi Boolean() kabi):

ikki-emas.js
// natija shu yerda chiqadi
! operatorining ustuvorligi barcha mantiqiy operatorlar ichida eng yuqori. Shuning uchun u har doim && va || dan oldin bajariladi.

Amaliy qo'llanish

Mantiqiy operatorlarning qiymat qaytarish xususiyati amalda juda foydali. Masalan, standart (default) qiymat berish:

amaliy.js
// natija shu yerda chiqadi

&& esa "agar rost bo'lsa, bajar" mantig'i uchun ishlatiladi:

va-amaliy.js
// natija shu yerda chiqadi

Xulosa