IlmHamroh
JavaScript Full-stack/8-qism. JavaScript asoslari10/61-dars14 daqiqa
Mundarija (34)

JavaScript boolean: true, false va truthy/falsy qiymatlar

Qisqacha: Boolean — faqat ikki qiymatli tur: true (rost) yoki false (yolg'on). JavaScript "ha yoki yo'q" javobi kerak bo'lganda har qanday qiymatni boolean'ga aylantiradi. Faqat 8 ta qiymat false bo'ladi — ular falsy: false, 0, -0, 0n, "", null, undefined, NaN. Qolgan hamma qiymat — truthy, ya'ni true bo'ladi.

Bu darsda

  • true va false qiymatlarini yozib, ularni o'zgaruvchida saqlay olasiz.
  • Truthy va falsy nima ekanini tushuntira olasiz.
  • 8 ta falsy qiymatni yoddan ayta olasiz.
  • Istalgan qiymatni Boolean(x) va !!x bilan tekshira olasiz.
  • "0", "false" va [] kabi tuzoqlarga tushmaysiz.

Oldin bilishingiz kerak: Ma'lumot turlari xaritasi, typeof va turni aniqlash, undefined va null.

1. Nega bu kerak?

Oldingi darsda "yo'qlik"ning ikki shaklini — undefined va null ni ko'rdik. Endi dasturlashdagi eng ko'p beriladigan savolga o'tamiz: "ha yoki yo'q?"

Hayotda bunday savollar juda ko'p:

  • Foydalanuvchi ismini kiritdimi?
  • Buyurtma to'landimi?
  • Savatda mahsulot bormi?
  • Telegram'dagi xabar bo'sh emasmi?

Dastur har bir savolga faqat ikki xil javob beradi: ha yoki yo'q. Buning uchun JavaScript'da maxsus tur bor — boolean.

Keyingi darslarda dastur shu javobga qarab turli ish qilishini o'rganamiz: "to'langan bo'lsa — chek chiqar, aks holda — ogohlantir". Bu if / else darsida bo'ladi. U yerda bu darsdagi bilim juda muhim bo'ladi.

2. Boolean turi: true va false

2.1 Faqat ikki qiymat

Mantiqiy qiymat (boolean) — faqat ikki holatdan birini bildiradigan qiymat: true (rost, ha) yoki false (yolg'on, yo'q).

Hayotdan o'xshatish: chiroq tugmasi. U yoqilgan yoki o'chirilgan bo'ladi. "Yarim yoqilgan" holat yo'q.

js
const tolandi = true;
const yetkazildi = false;

console.log(tolandi); // true
console.log(yetkazildi); // false
console.log(typeof tolandi); // boolean

E'tibor bering: true va false qo'shtirnoqsiz yoziladi. Ular — JavaScript'ning kalit so'zlari, oddiy matn emas.

Maslahat: "Boolean" so'zi ingliz matematigi Jorj Bul (George Boole) nomidan olingan. U 1850-yillarda "rost/yolg'on" mantig'ini matematikaga aylantirgan. Kompyuterdagi 0 va 1 ham shu g'oyaga asoslanadi.

2.2 true va "true" — ikki xil narsa

Qo'shtirnoq qo'ysangiz, bu endi boolean emas, satr bo'ladi:

js
console.log(typeof true); // boolean
console.log(typeof "true"); // string

Birinchisi — "rost" degan mantiqiy qiymat. Ikkinchisi — shunchaki t, r, u, e harflaridan iborat matn. Bu farq keyinroq muhim tuzoqqa aylanadi (5-bo'limda ko'ramiz).

2.3 Boolean o'zgaruvchiga qanday nom beriladi?

Boolean o'zgaruvchi savolga javob beradi. Shuning uchun nomi ham savolga o'xshasin: o'qiganda "ha yoki yo'q" deb javob berish mumkin bo'lsin.

Noaniq nom Yaxshi nom Nega
tolov tolandi "To'landimi?" — ha/yo'q
admin adminmi "Adminmi?" — ha/yo'q
savat savatBoshmi "Savat bo'shmi?" — ha/yo'q

tolov nomini ko'rsangiz, ichida summa bormi yoki holat bormi — bilmaysiz. tolandi esa darhol "ha/yo'q" ekanini aytadi.

Real loyihalarda nomlar inglizcha bo'ladi va ko'pincha is, has bilan boshlanadi: isPaid ("to'langanmi"), hasItems ("elementlari bormi"). Buni Toza kod: nomlash darsida batafsil ko'ramiz.

2.4 Boolean qayerdan paydo bo'ladi?

Ikki yo'l bor. Birinchisi — true yoki false ni o'zingiz yozasiz, yuqoridagidek. Ikkinchisi — JavaScript o'zi hisoblab beradi. Masalan, "katta" belgisi > maktabdagi matematikadagidek ishlaydi:

js
console.log(10 > 3); // true
console.log(2 > 7); // false

10 > 3 — bu savol: "10 soni 3 dan kattami?" Javob — true. Bunday operatorlarni taqqoslash operatorlari darsida to'liq o'rganamiz.

Tekshirib ko'ring: const javob = "false"; qatoridan keyin typeof javob nima bo'ladi?

Javob

"string". Qiymat qo'shtirnoq ichida yozilgan, demak u — satr. Ichidagi so'z "false" bo'lsa ham, JavaScript uchun bu oddiy matn. Boolean bo'lishi uchun qo'shtirnoqsiz false yozilishi kerak edi.

3. Truthy va falsy nima?

3.1 Muammo: savolga son yoki matn kelsa-chi?

Tasavvur qiling, siz do'kon ilovasini yozyapsiz. Savatdagi mahsulotlar soni o'zgaruvchida turibdi:

js
const mahsulotSoni = 3;

Savol: "Savatda mahsulot bormi?" Bizda true ham, false ham yo'q — faqat 3 soni bor. Lekin mantiqan javob aniq: 3 ta mahsulot bor, demak "ha".

JavaScript ham shunday o'ylaydi. "Ha yoki yo'q" javobi kerak bo'lgan joyga boshqa turdagi qiymat kelsa, u uni boolean'ga aylantiradi. Qanday aylantirishini bilish — shu darsning asosiy maqsadi.

3.2 Ta'rif

  • Truthy (inglizcha "rostga o'xshash") — boolean'ga aylantirilganda true bo'ladigan qiymat.
  • Falsy ("yolg'onga o'xshash") — boolean'ga aylantirilganda false bo'ladigan qiymat.

Bu so'zlarning o'zbekcha qisqa tarjimasi yo'q. Dasturchilar ham, hujjatlar ham "truthy" va "falsy" deydi. Biz ham shunday aytamiz.

3.3 Boolean(x) bilan tekshirish

Qiymat truthy yoki falsy ekanini qanday bilamiz? Boolean(...) yordamida. Bu — JavaScript'ning tayyor vositasi, xuddi console.log kabi. Qavs ichiga qiymat berasiz, u true yoki false qaytaradi.

js
console.log(Boolean(3)); // true
console.log(Boolean(0)); // false
console.log(Boolean("Ali")); // true
console.log(Boolean("")); // false

3 — truthy, 0 — falsy. "Ali" — truthy, bo'sh satr "" — falsy.

Maslahat: Boolean ning birinchi harfi katta: Boolean, boolean emas. Boolean(...) aslida funksiya. Funksiyalarni o'zimiz yozishni keyinroq o'rganamiz — hozircha qavs ichiga qiymat berib natija olishni bilish yetarli.

Tekshirib ko'ring: Boolean(100) va Boolean(-5) nima qaytaradi?

Javob

Ikkalasi ham true. Nolga teng bo'lmagan har qanday son — truthy, manfiy son ham. Sonlar orasida faqat nol falsy (buni keyingi bo'limda aniq ko'ramiz).

4. Sakkizta falsy qiymat

4.1 Ro'yxatni yodlang — qolgani o'z-o'zidan

Falsy qiymatlar juda kam. Ularni yodlab olsangiz, qolgan hamma qiymat truthy ekanini bilasiz.

Hayotdan o'xshatish: to'y zaliga kirishda qo'riqchi qo'lida qisqa ro'yxat bor. Ro'yxatdagi 8 kishi kiritilmaydi. Ro'yxatda yo'q har qanday odam — kiraveradi. JavaScript'da ham shunday: 8 ta falsy qiymat bor, boshqa hamma narsa truthy.

# Qiymat Turi Nima u
1 false boolean Yolg'onning o'zi
2 0 number Nol
3 -0 number Minus nol
4 0n bigint BigInt'dagi nol
5 "" string Bo'sh satr
6 null null Ataylab qo'yilgan "bo'sh"
7 undefined undefined "Qiymat berilmagan"
8 NaN number "Son emas"

Hammasini tekshirib ko'ramiz:

js
console.log(Boolean(false)); // false
console.log(Boolean(0)); // false
console.log(Boolean(-0)); // false
console.log(Boolean(0n)); // false
console.log(Boolean("")); // false
console.log(Boolean(null)); // false
console.log(Boolean(undefined)); // false
console.log(Boolean(NaN)); // false

4.2 Notanish qiymatlar haqida bir og'iz

Ro'yxatda uchta notanish qiymat bo'lishi mumkin. Keling, qisqa tanishamiz:

  • -0 (minus nol) — JavaScript'da nolning "manfiy" nusxasi ham bor. Masalan, 0 * -1 hisoblansa, -0 chiqadi. Amalda u oddiy noldek ishlaydi. Batafsil — Number turi darsida.
  • 0n — oxiridagi n harfi uni BigInt qiladi. BigInt — juda katta butun sonlar uchun maxsus son turi. 0n — shu turdagi nol. Batafsil — BigInt darsida, hozir bilish shart emas.
  • NaN (Not a Number — "son emas") — son chiqishi kerak bo'lgan, lekin chiqmagan hisob natijasi. Masalan, "salom" * 2 — matnni songa ko'paytirib bo'lmaydi, natija NaN. Uning turi baribir number.
js
console.log("salom" * 2); // NaN
console.log(typeof NaN); // number
console.log(0 * -1); // -0

G'alati tuyulishi tabiiy: "son emas" degan qiymatning turi "son". NaN — son hisobidagi "buzilgan natija", shuning uchun u son turiga kiradi.

4.3 Qanday eslab qolish mumkin?

Ro'yxatni uch guruhga bo'lsangiz, eslash osonlashadi:

  1. Yolg'onning o'zi: false.
  2. Har xil "nol"lar: 0, -0, 0n, NaN (buzilgan son) va "" (nol uzunlikdagi satr).
  3. "Yo'qlik": null, undefined.

Qisqasi: yolg'on, nol va yo'qlik — falsy. Qolgani — truthy.

Maslahat: Brauzerda to'qqizinchi, juda g'alati istisno ham bor — document.all. Bu 1990-yillardan qolgan eski vosita, zamonaviy kodda uni uchratmaysiz. Intervyuda "falsy qiymatlar nechta?" deb so'rashsa, 8 ta deb ayting va buni qo'shimcha qilsangiz — bilimingiz chuqur ekanini ko'rsatasiz.

Tekshirib ko'ring: Qaysilari falsy: 0, 1, "", "a", null, NaN?

Javob

Falsy: 0, "", null, NaN — to'rttasi ham 8 talik ro'yxatda bor. 1 va "a" ro'yxatda yo'q, demak truthy.

5. Truthy tuzoqlari: falsy'ga o'xshaydi, lekin emas

Endi eng qiziq qism. Ba'zi qiymatlar "bo'sh" yoki "yo'q" ga o'xshaydi. Lekin 8 talik ro'yxatda yo'q — demak ular truthy.

5.1 "0" va "false" — bu satrlar

js
console.log(Boolean("0")); // true
console.log(Boolean("false")); // true
console.log(Boolean(" ")); // true

Uchalasi ham true! Sababi: bular satr, va satr faqat butunlay bo'sh bo'lsagina falsy.

  • "0" — bitta belgili satr (ichida "0" belgisi bor). Nol soni 0 emas.
  • "false" — besh harfli satr. false qiymati emas.
  • " " — ichida bitta bo'sh joy (probel) bor. Uzunligi 1, demak bo'sh emas.

Bu nega muhim? Foydalanuvchi saytdagi maydonga biror narsa yozsa, JavaScript uni har doim satr sifatida oladi. U 0 yozsa ham — sizga "0" keladi. Bu satr truthy. "Nol yozdi, demak yo'q" deb o'ylasangiz, adashasiz.

5.2 Bo'sh massiv va bo'sh obyekt

js
console.log(Boolean([])); // true
console.log(Boolean({})); // true

[] — bo'sh massiv (ro'yxat), {} — bo'sh obyekt. Ularni massiv va obyekt darslarida o'rganamiz. Hozir bitta narsani eslab qoling: ular bo'sh bo'lsa ham truthy.

Nega? Chunki ular 8 talik ro'yxatda yo'q. JavaScript ichiga qaramaydi — "bu massiv mavjud" deydi va true beradi. Boshqa tillardan (masalan, Python'dan) kelganlar shu joyda ko'p adashadi: u yerda bo'sh ro'yxat falsy.

5.3 Manfiy son va Infinity

js
console.log(Boolean(-1)); // true
console.log(Boolean(0.5)); // true
console.log(Boolean(Infinity)); // true

Sonlarda qoida sodda: faqat 0, -0 va NaN falsy. Qolgan hamma son — manfiy, kasr, cheksiz (Infinity) — truthy.

Tekshirib ko'ring: Boolean("0") va Boolean(0) natijalari nega har xil?

Javob

Boolean(0) — false, chunki 0 soni falsy ro'yxatida bor. Boolean("0") — true, chunki "0" — satr, va u bo'sh emas: ichida bitta belgi bor. Qo'shtirnoq qiymatning turini butunlay o'zgartiradi.

6. ! va !! — qisqa yo'l

6.1 ! — "teskarisi"

! belgisi — inkor operatori (NOT). U qiymatni boolean'ga aylantiradi va teskarisini beradi: true → false, false → true.

js
console.log(!true); // false
console.log(!false); // true
console.log(!0); // true
console.log(!"salom"); // false

!0 qanday ishladi? Avval 0 boolean'ga aylandi — false. Keyin teskarisi olindi — true.

! va unga o'xshash &&, || operatorlarini mantiqiy operatorlar darsida to'liq o'rganamiz.

6.2 !! — ikki marta teskarisi

Ikkita ! qo'ysangiz, teskarining teskarisi chiqadi. Natija — qiymatning o'z boolean holati. Ya'ni !!x — Boolean(x) bilan bir xil.

Qadamma-qadam ko'ramiz:

Ifoda Nima bo'ldi Natija
"Ali" truthy satr —
!"Ali" boolean'ga aylandi va teskarisi olindi false
!!"Ali" yana teskarisi olindi true
js
console.log(!!"Ali"); // true
console.log(!!""); // false
console.log(!!42); // true
console.log(!!null); // false

Maslahat: !!x va Boolean(x) bir xil ishlaydi. Qaysi birini tanlash — ta'b masalasi. !!x qisqa, shuning uchun real kodda tez-tez uchraydi. Boolean(x) esa boshlovchi uchun tushunarliroq. Ikkalasini ham o'qiy olishingiz kerak.

Tekshirib ko'ring: !!undefined va !!"undefined" natijalari qanday?

Javob

!!undefined — false, chunki undefined falsy. !!"undefined" — true, chunki bu 9 harfli satr, bo'sh emas. Yana o'sha qoida: qo'shtirnoq ichidagi so'z qiymat emas, matn.

7. Real misol: formadagi ma'lumotni tekshirish

Tasavvur qiling, taksi ilovasida foydalanuvchi ismini, telefonini va izohini kiritadi. Ba'zi maydonlar to'ldirilgan, ba'zilari yo'q:

js
const ism = "Malika";
const telefon = "";
const izoh = " ";
const yolovchilarSoni = 0;

console.log("Ism bormi:", Boolean(ism));
console.log("Telefon bormi:", Boolean(telefon));
console.log("Izoh bormi:", Boolean(izoh));
console.log("Yo'lovchi bormi:", !!yolovchilarSoni);

Konsolda:

text
Ism bormi: true
Telefon bormi: false
Izoh bormi: true
Yo'lovchi bormi: false

Natijalarni birma-bir ko'ramiz:

  • ism — to'ldirilgan, true. To'g'ri.
  • telefon — bo'sh satr, false. To'g'ri: telefon kiritilmagan.
  • izoh — faqat bo'sh joy, lekin true! Foydalanuvchi aslida hech narsa yozmagan. Bo'sh joylarni olib tashlash usulini matnni tozalash darsida o'rganamiz.
  • yolovchilarSoni — 0, falsy. Bu yerda ma'no to'g'ri: yo'lovchi yo'q.

Diqqat: Ba'zan 0 — to'liq to'g'ri, kerakli qiymat. Masalan, mahsulot narxi 0 so'm (bepul aksiya) yoki talabaning bahosi 0 ball. Truthy/falsy tekshiruvi bunday 0 ni "qiymat yo'q" deb qabul qiladi. Bu — real loyihalardagi eng ko'p xatolardan biri. Uni to'g'ri hal qiladigan ?? operatorini o'tgan darsda qisqa ko'rdingiz, to'liq esa ?? va ?. darsida o'rganamiz.

8. Ko'p uchraydigan xatolar

8.1 True yoki TRUE deb yozish

js
const tolandi = True;
text
ReferenceError: True is not defined

Tarjimasi: "True aniqlanmagan". JavaScript katta-kichik harfni farqlaydi. Kalit so'z faqat kichik harf bilan: true, false. True ni ko'rib, JavaScript uni siz e'lon qilmagan o'zgaruvchi nomi deb o'yladi — shuning uchun "aniqlanmagan" deydi. Python'dan kelganlar ko'p adashadi: u yerda True katta harf bilan yoziladi.

8.2 boolean(x) deb kichik harf bilan yozish

js
console.log(boolean(0));
text
ReferenceError: boolean is not defined

Xuddi shu sabab: to'g'risi — Boolean, katta B bilan. typeof esa kichik harf bilan "boolean" qaytaradi. Chalkashtirmaslik uchun eslab qoling: tekshiruvchi vosita katta harf bilan (Boolean(x)), tur nomi kichik harf bilan ("boolean").

8.3 Satrdagi "false" ni yolg'on deb o'ylash

js
const obunaFaol = "false";
console.log(Boolean(obunaFaol)); // true

Xato chiqmaydi, lekin mantiq buziladi. Bunday qiymat ko'pincha tashqaridan keladi: sozlama faylidan, serverdan yoki formadan. U yerda hamma narsa matn bo'lib keladi. Satrni haqiqiy boolean'ga aylantirishning to'g'ri usullarini turlarni aniq o'zgartirish darsida ko'ramiz.

8.4 Bo'sh massivni falsy deb o'ylash

Boolean([]) — true. Massiv bo'shligini tekshirish uchun uning uzunligiga (elementlar soniga) qarash kerak. Buni massiv darsida o'rganamiz.

9. Mashqlar

1-mashq (oson): Falsy'ni toping

Quyidagi qiymatlarning har biri uchun Boolean(...) natijasini oldindan yozing. Keyin kodni ishga tushirib, o'zingizni tekshiring.

js
console.log(Boolean(7));
console.log(Boolean(""));
console.log(Boolean("Toshkent"));
console.log(Boolean(null));
console.log(Boolean(-3));
console.log(Boolean(undefined));
Yechim
js
console.log(Boolean(7)); // true
console.log(Boolean("")); // false
console.log(Boolean("Toshkent")); // true
console.log(Boolean(null)); // false
console.log(Boolean(-3)); // true
console.log(Boolean(undefined)); // false

"", null, undefined — 8 talik falsy ro'yxatida bor. 7, -3 va "Toshkent" ro'yxatda yo'q, demak truthy.

2-mashq (o'rta): Bo'sh joyni to'ldiring

Quyidagi natijalarni to'ldiring. !!x — Boolean(x) bilan bir xil ekanini eslang.

  • !!"0" natijasi:
  • !!0 natijasi:
  • !!NaN natijasi:
  • !![] natijasi:
  • !"Jasur" natijasi:
Yechim
js
console.log(!!"0"); // true
console.log(!!0); // false
console.log(!!NaN); // false
console.log(!![]); // true
console.log(!"Jasur"); // false
  • "0" — bo'sh bo'lmagan satr, truthy.
  • 0 va NaN — falsy ro'yxatida.
  • [] — bo'sh massiv, lekin baribir truthy.
  • !"Jasur" — bitta !: "Jasur" truthy, teskarisi false.

3-mashq (qiyin): Buyurtma kartasi

Choyxona ilovasi uchun buyurtma ma'lumotlari berilgan:

js
const mijozIsmi = "Jasur";
const manzil = "";
const chegirmaKodi = "0";
const choySoni = 0;
const izoh = null;

Har bir maydon uchun konsolga Maydon nomi: true/false ko'rinishida chiqaring. Masalan, Manzil kiritilganmi: false. console.log ga vergul bilan ikki qiymat berish mumkin: console.log("Ism:", qiymat).

Keyin o'zingizga savol bering: qaysi natija ma'no jihatidan noto'g'ri bo'lishi mumkin?

Yechim
js
const mijozIsmi = "Jasur";
const manzil = "";
const chegirmaKodi = "0";
const choySoni = 0;
const izoh = null;

console.log("Ism kiritilganmi:", Boolean(mijozIsmi));
console.log("Manzil kiritilganmi:", Boolean(manzil));
console.log("Chegirma kodi bormi:", Boolean(chegirmaKodi));
console.log("Choy bormi:", !!choySoni);
console.log("Izoh bormi:", !!izoh);

Konsolda:

text
Ism kiritilganmi: true
Manzil kiritilganmi: false
Chegirma kodi bormi: true
Choy bormi: false
Izoh bormi: false

Ma'no jihatidan shubhali joy — chegirmaKodi. Foydalanuvchi 0 yozgan, lekin u "0" satri bo'lib kelgan va truthy. Dastur "chegirma kodi bor" deb o'ylaydi. Agar "0" "chegirma yo'q" degani bo'lsa, bu xato.

choySoni ham e'tiborga loyiq: bu yerda 0 haqiqatan "choy yo'q" degani, natija to'g'ri. Lekin boshqa vaziyatda 0 to'g'ri qiymat bo'lishi mumkin — 7-bo'limdagi ogohlantirishni eslang.

10. Real ishda

Truthy/falsy — JavaScript kodida eng ko'p uchraydigan tushunchalardan biri. Quyidagi nomlarning ba'zilarini hali bilmaysiz — bu normal, har biri kursda alohida o'rganiladi:

  • Forma tekshiruvi: "Ism maydoni bo'sh emasmi?" — bo'sh satr falsy ekanidan foydalaniladi.
  • Telegram bot: foydalanuvchi bo'sh xabar yoki faqat rasm yuborsa, matn "" yoki undefined bo'ladi — bot shuni tekshiradi.
  • Serverdan kelgan javob: ma'lumot keldimi yoki null mi — truthy tekshiruvi bilan aniqlanadi.
  • React (sayt yasash uchun mashhur vosita, kursda alohida qismi bor): ekranda nimanidir ko'rsatish yoki ko'rsatmaslik shu qoidaga tayanadi. U yerda 0 qiymati bilan bog'liq mashhur xato bor — o'shanda bu darsni eslaysiz.

Intervyuda boshlang'ich dasturchiga ko'p beriladigan savollar: "Falsy qiymatlarni sanab bering", "Boolean([]) nima qaytaradi?", "!! nima qiladi?". Endi uchalasiga ham javob bera olasiz.

Xulosa

  • Boolean — faqat ikki qiymat: true va false. Qo'shtirnoqsiz, kichik harf bilan.
  • Falsy — 8 ta: false, 0, -0, 0n, "", null, undefined, NaN. Qolgan hammasi — truthy.
  • "0", "false", " ", [], {} — truthy. Bu eng ko'p uchraydigan tuzoqlar.
  • Boolean(x) va !!x — qiymatning truthy yoki falsy ekanini bir xil ko'rsatadi.
  • 0 ba'zan to'g'ri qiymat — uni "yo'q" deb adashmang.

Keyingi dars: Arifmetik va tayinlash operatorlari — JavaScript'da qo'shish, ayirish, qoldiq topish va o'zgaruvchi qiymatini qisqa yo'l bilan o'zgartirishni o'rganamiz.

Ulashish:Telegram'da

Izohlar (0)

Izoh yozish uchun kiring.

  • Hozircha izoh yo'q. Birinchi bo'ling!
JavaScript boolean: true, false va truthy/falsy qiymatlar — IlmHamroh