JavaScript-da toârtta mantiqiy operator mavjud: || (YOKI), && (VA), ! (EMAS), ?? (Nullish Coalescing). Bu yerda biz birinchi uchta operatorni koârib chiqamiz, ?? operator keyingi maqolada yoritilgan.
Ular âmantiqiyâ deb atalsa ham, ular faqat boolean tipidagi qiymatlargagina emas, balki har qanday tipdagi qiymatlarga ham qoâllanilishi mumkin. Ularning natijasi ham har qanday tipda boâlishi mumkin.
Keling, batafsil koârib chiqamiz.
|| (YOKI)
âYOKIâ operatori ikki vertikal chiziq belgisi bilan ifodalanadi:
result = a || b;
Klassik dasturlashda, mantiqiy YOKI faqat boolean qiymatlar bilan ishlash uchun moâljallangan. Agar argumentlaridan biri true boâlsa, u true qaytaradi, aks holda false qaytaradi.
JavaScript-da esa bu operator biroz murakkabroq va kuchlidir. Lekin avval boolean qiymatlar bilan nima sodir boâlishini koârib chiqaylik.
Toârtta mumkin boâlgan mantiqiy kombinatsiya mavjud:
alert(true || true); // true
alert(false || true); // true
alert(true || false); // true
alert(false || false); // false
Koârib turganingizdek, ikkala operand ham false boâlgan holdan tashqari, natija har doim true boâladi.
Agar operand boolean boâlmasa, u baholash uchun boolean tipiga aylantiriladi.
Masalan, 1 raqami true sifatida, 0 raqami esa false sifatida qaraladi:
if (1 || 0) {
// xuddi if( true || false ) kabi ishlaydi
alert("haqiqiy!");
}
Koâpincha, YOKI || operatori if ifodasida berilgan shartlardan birortasi true ekanligini tekshirish uchun ishlatiladi.
Masalan:
let hour = 9;
if (hour < 10 || hour > 18) {
alert( 'Ofis yopiq.' );
}
Koâproq shartlarni ham qoâshishimiz mumkin:
let hour = 12;
let isWeekend = true;
if (hour < 10 || hour > 18 || isWeekend) {
alert("Ofis yopiq."); // dam olish kuni
}
YOKI "||" birinchi haqiqiy qiymatni topadi
Yuqorida tasvirlangan mantiq biroz klassikdir. Endi keling, JavaScript-ning âqoâshimchaâ xususiyatlarini koârib chiqaylik.
Kengaytirilgan algoritm quyidagicha ishlaydi.
Bir nechta YOKI bilan birlashtirilgan qiymatlar berilgan:
result = value1 || value2 || value3;
YOKI || operatori quyidagicha ishlaydi:
- Operandlarni chapdan oângga qarab baholaydi.
- Har bir operand uchun uni boolean tipiga aylantiradi. Agar natija
trueboâlsa, toâxtaydi va oâsha operandning asl qiymatini qaytaradi. - Agar barcha operandlar baholangan boâlsa (yaâni hammasi
falseboâlsa), oxirgi operandni qaytaradi.
Qiymat aylantirishsiz, asl shaklida qaytariladi.
Boshqacha qilib aytganda, YOKI || zanjirlari birinchi haqiqiy qiymatni yoki agar haqiqiy qiymat topilmasa, oxirgi qiymatni qaytaradi.
Masalan:
alert(1 || 0); // 1 (1 haqiqiy)
alert(null || 1); // 1 (1 birinchi haqiqiy qiymat)
alert(null || 0 || 1); // 1 (birinchi haqiqiy qiymat)
alert(undefined || null || 0); // 0 (hammasi yolg'on, oxirgi qiymatni qaytaradi)
Bu âsof, klassik, faqat-boolean YOKIâ bilan solishtirganda qiziqarli foydalanish imkoniyatlarini beradi.
-
Oâzgaruvchilar yoki ifodalar roâyxatidan birinchi haqiqiy qiymatni olish.
Masalan, bizda
firstName,lastNamevanickNameoâzgaruvchilari bor, ularning barchasi ixtiyoriy (yaâni undefined yoki yolgâon qiymatlarga ega boâlishi mumkin).Maâlumotga ega boâlgan birini tanlash va uni koârsatish uchun YOKI
||dan foydalanamiz (yoki agar hech narsa oârnatilmagan boâlsa"Anonymous"):let firstName = ""; let lastName = ""; let nickName = "SuperCoder"; alert( firstName || lastName || nickName || "Anonymous"); // SuperCoderAgar barcha oâzgaruvchilar yolgâon boâlsa,
"Anonymous"koârinadi. -
Qisqa tutashuv baholashi.
YOKI
||operatorining yana bir xususiyati âqisqa tutashuvâ baholashidir.Bu shuni anglatadiki,
||oâz argumentlarini birinchi haqiqiy qiymatga yetguncha qayta ishlaydi, keyin qiymat darhol qaytariladi, boshqa argumentga tegmasdan turib.Bu xususiyatning ahamiyati, agar operand oddiy qiymat emas, balki oâzgaruvchi tayinlash yoki funksiya chaqiruvi kabi yon taâsirli ifoda boâlsa yaqqol koârinadi.
Quyidagi misolda faqat ikkinchi xabar chop etiladi:
true || alert("chop etilmaydi"); false || alert("chop etiladi");Birinchi qatorda YOKI
||operatoritrueni koârishi bilanoq baholashni darhol toâxtatadi, shuning uchunalertbajarilmaydi.Baâzan odamlar bu xususiyatdan faqat chap qismidagi shart yolgâon boâlgandagina buyruqlarni bajarish uchun foydalanadilar.
&& (VA)
VA operatori ikki ampersand && bilan ifodalanadi:
result = a && b;
Klassik dasturlashda VA ikkala operand ham haqiqiy boâlsa true, aks holda false qaytaradi:
alert(true && true); // true
alert(false && true); // false
alert(true && false); // false
alert(false && false); // false
if bilan misol:
let hour = 12;
let minute = 30;
if (hour == 12 && minute == 30) {
alert("Vaqt 12:30");
}
YOKI kabi, VA operandiga ham har qanday qiymat ruxsat etilgan:
if (1 && 0) {
// true && false sifatida baholanadi
alert("ishlamaydi, chunki natija yolg'on");
}
VA â&&â birinchi yolgâon qiymatni topadi
Bir nechta VA bilan birlashtirilgan qiymatlar berilgan:
result = value1 && value2 && value3;
VA && operatori quyidagicha ishlaydi:
- Operandlarni chapdan oângga qarab baholaydi.
- Har bir operand uchun uni boolean tipiga aylantiradi. Agar natija
falseboâlsa, toâxtaydi va oâsha operandning asl qiymatini qaytaradi. - Agar barcha operandlar baholangan boâlsa (yaâni hammasi haqiqiy boâlsa), oxirgi operandni qaytaradi.
Boshqacha qilib aytganda, VA birinchi yolgâon qiymatni yoki agar topilmasa, oxirgi qiymatni qaytaradi.
Yuqoridagi qoidalar YOKI ga oâxshash. Farqi shundaki, VA birinchi yolgâon qiymatni qaytaradi, YOKI esa birinchi haqiqiy qiymatni qaytaradi.
Misollar:
// agar birinchi operand haqiqiy bo'lsa,
// VA ikkinchi operandni qaytaradi:
alert(1 && 0); // 0
alert(1 && 5); // 5
// agar birinchi operand yolg'on bo'lsa,
// VA uni qaytaradi. Ikkinchi operand e'tiborga olinmaydi
alert(null && 5); // null
alert(0 && "farqi yo'q nima bo'lsa"); // 0
Shuningdek, bir nechta qiymatni ketma-ket oâtkazishimiz mumkin. Birinchi yolgâon qiymat qanday qaytarilishini koâring:
alert(1 && 2 && null && 3); // null
Barcha qiymatlar haqiqiy boâlganda, oxirgi qiymat qaytariladi:
alert(1 && 2 && 3); // 3, oxirgisi
&&ning ustunligi YOKI||dan yuqoriVA&&operatorining ustunligi YOKI|| dan yuqoridir.
Shunday qilib, a && b || c && d kodi asosan && ifodalari qavs ichida boâlgandek: (a && b) || (c && d).
if ni || yoki && bilan almashtirmangBaâzan odamlar VA && operatoridan âif yozishning qisqaroq usuliâ sifatida foydalanadilar.
Masalan:
let x = 1;
(x > 0) && alert( 'Noldan katta!' );
&& ning oâng qismidagi harakat faqat baholash unga yetsa bajariladi. Yaâni, faqat (x > 0) haqiqiy boâlsa.
Demak, bizda quyidagining oâxshashi bor:
let x = 1;
if (x > 0) alert( 'Noldan katta!' );
Garchi && li variant qisqaroq koârinsa ham, if aniqroq va biroz oâqishga osonroqdir. Shuning uchun biz har bir konstruksiyani oâz maqsadi uchun ishlatishni tavsiya qilamiz: agar if kerak boâlsa if dan, VA kerak boâlsa && dan foydalaning.
! (EMAS)
Boolean EMAS operatori undov belgisi ! bilan ifodalanadi.
Sintaksis juda oddiy:
result = !value;
Operator bitta argument qabul qiladi va quyidagicha ishlaydi:
- Operandni boolean tipiga aylantiradi:
true/false. - Teskari qiymatni qaytaradi.
Masalan:
alert(!true); // false
alert(!0); // true
Ikki marta EMAS !! baâzan qiymatni boolean tipiga aylantirish uchun ishlatiladi:
alert(!!"bo'sh bo'lmagan satr"); // true
alert(!!null); // false
Yaâni, birinchi EMAS qiymatni boolean ga aylantiradi va teskarisini qaytaradi, ikkinchi EMAS uni yana teskariga aylantiradi. Natijada bizda oddiy qiymat-dan-boolean-ga aylantirish boâladi.
Xuddi shu ishni qilishning biroz batafsil usuli bor â oârnatilgan Boolean funksiyasi:
alert(Boolean("bo'sh bo'lmagan satr")); // true
alert(Boolean(null)); // false
EMAS ! ning ustunligi barcha mantiqiy operatorlar ichida eng yuqori, shuning uchun u har doim birinchi boâlib, && yoki || dan oldin bajariladi.
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â¦)