3-bo‘lim
Operatorlar va shartlar
Arifmetik va taqqoslash operatorlari, == va === farqi, mantiqiy operatorlar, if/else, ternar operator va switch.
Ushbu bo‘lim mundarijasi
Dastur qaror qabul qila olishi kerak. Shart konstruksiyalari - shu qarorlarning asosi.
Arifmetik operatorlar #
const a = 17;
const b = 5;
console.log("Qo'shish :", a + b);
console.log("Ayirish :", a - b);
console.log("Ko'paytirish:", a * b);
console.log("Bo'lish :", a / b);
console.log("Qoldiq :", a % b);
console.log("Daraja :", a ** 2);
// Butun qismini olish
console.log("Butun bo'lish:", Math.floor(a / b));
Qo'shish : 22
Ayirish : 12
Ko'paytirish: 85
Bo'lish : 3.4
Qoldiq : 2
Daraja : 289
Butun bo'lish: 3
% - eng ko'p ishlatiladigan operatorlardan biri:
son % 2 === 0 // juft sonmi?
indeks % ranglar.length // aylanma tanlov
soniya % 60 // daqiqadagi soniya
Manfiy son bilan ehtiyot bo'ling - JavaScript da natija bo'linuvchining ishorasini oladi:
console.log(-7 % 3); // -1, ba'zi tillarda 2
Har doim musbat qoldiq kerak bo'lsa:
((-7 % 3) + 3) % 3 // 2
Qisqartirilgan yozuvlar #
let hisob = 10;
hisob += 5; console.log("+= 5 :", hisob);
hisob -= 3; console.log("-= 3 :", hisob);
hisob *= 2; console.log("*= 2 :", hisob);
hisob /= 4; console.log("/= 4 :", hisob);
hisob **= 2; console.log("**= 2:", hisob);
let sanoq = 5;
console.log("sanoq++ :", sanoq++); // avval qaytaradi, keyin oshiradi
console.log("hozir :", sanoq);
console.log("++sanoq :", ++sanoq); // avval oshiradi, keyin qaytaradi
+= 5 : 15
-= 3 : 12
*= 2 : 24
/= 4 : 6
**= 2: 36
sanoq++ : 5
hozir : 6
++sanoq : 7
== va === farqi #
console.log("5 == 5 :", 5 == 5);
console.log('"5" == 5 :', "5" == 5);
console.log('"5" === 5:', "5" === 5);
console.log("null == undefined :", null == undefined);
console.log("null === undefined:", null === undefined);
console.log("0 == false :", 0 == false);
console.log("0 === false:", 0 === false);
console.log('"" == 0 :', "" == 0);
console.log("NaN == NaN :", NaN == NaN);
5 == 5 : true
"5" == 5 : true
"5" === 5: false
null == undefined : true
null === undefined: false
0 == false : true
0 === false: false
"" == 0 : true
NaN == NaN : false
== mantiqan noizchilErkin tenglik tranzitiv emas - matematik mantiqni buzadi:
console.log("" == 0); // true
console.log(0 == "0"); // true
console.log("" == "0"); // false (!)
Agar A = B va B = C bo'lsa, A = C bo'lishi kerak edi. Bu yerda bunday emas.
Yana bir tuzoq:
console.log([] == false); // true
console.log([0] == false); // true
console.log([1] == true); // true
console.log([2] == true); // false (!)
Qoida: har doim === va !== ishlating.
Yagona maqbul istisno - null va undefined ni birga tekshirish:
if (qiymat == null) { // null yoki undefined
// ...
}
Bu qasddan qilingan qisqartma va tajribali dasturchilar orasida qabul qilingan.
NaN ni tekshirish #
const natija = Number("salom");
console.log("Qiymat :", natija);
console.log("natija === NaN:", natija === NaN);
console.log("isNaN(natija) :", isNaN(natija));
console.log("Number.isNaN :", Number.isNaN(natija));
// isNaN xavfli - avval songa aylantiradi
console.log('isNaN("salom") :', isNaN("salom"));
console.log('Number.isNaN("salom"):', Number.isNaN("salom"));
Qiymat : NaN
natija === NaN: false
isNaN(natija) : true
Number.isNaN : true
isNaN("salom") : true
Number.isNaN("salom"): false
NaN o'ziga ham teng emasNaN === NaN false qaytaradi. Bu IEEE 754 standarti
talabi - "son emas" qiymatlar bir-biriga teng deb hisoblanmaydi.
Shuning uchun NaN ni oddiy taqqoslash bilan topib bo'lmaydi.
Ikkita tekshiruv funksiyasi bor va ular farqli:
| Funksiya | Xatti-harakati |
|---|---|
isNaN(x) | Avval Number(x) qiladi, keyin tekshiradi |
Number.isNaN(x) | Faqat haqiqiy NaN uchun true |
isNaN("salom") true beradi, chunki "salom" songa aylanmaydi.
Lekin "salom" - bu satr, NaN emas.
Har doim Number.isNaN ishlating.
Qiziq fakt: NaN !== NaN xossasidan foydalanib uni aniqlash
mumkin edi:
function nanmi(x) { return x !== x; }
Mantiqiy operatorlar #
const yosh = 25;
const talaba = true;
console.log("VA :", yosh > 18 && talaba);
console.log("YOKI:", yosh > 60 || talaba);
console.log("EMAS:", !talaba);
// Qisqa tutashuv - o'ngdagi baholanmaydi
function chaqirildi() {
console.log(" (funksiya ishga tushdi)");
return true;
}
console.log("false && ... :");
const birinchi = false && chaqirildi();
console.log("true || ... :");
const ikkinchi = true || chaqirildi();
console.log("Natijalar:", birinchi, ikkinchi);
VA : true
YOKI: true
EMAS: false
false && ... :
true || ... :
Natijalar: false true
&& va || mantiqiy qiymat emas, operandning o'zini
qaytaradi. Bu qulay naqshlarni beradi:
// Standart qiymat berish
const nom = kiritilgan || "Mehmon";
// Shartli bajarish
foydalanuvchi && salomlashish(foydalanuvchi);
// Xavfsiz murojaat
const shahar = manzil && manzil.shahar;
Lekin || da tuzoq bor: 0 va "" ham yolg'on hisoblanadi.
const soni = 0;
console.log(soni || 10); // 10 - lekin biz 0 ni xohlagandik!
Buning uchun ?? (nullish coalescing) yaratilgan - u faqat
null va undefined da ishlaydi:
console.log(soni ?? 10); // 0 - to'g'ri
?? va ?. operatorlari #
const sozlama = { hajm: 0, nom: "", rang: null };
console.log("|| bilan:", sozlama.hajm || 50);
console.log("?? bilan:", sozlama.hajm ?? 50);
console.log("nom || :", sozlama.nom || "nomsiz");
console.log("nom ?? :", sozlama.nom ?? "nomsiz");
console.log("rang ?? :", sozlama.rang ?? "qora");
// Ixtiyoriy zanjir
const foydalanuvchi = { ism: "Aziza" };
console.log("Shahar:", foydalanuvchi.manzil?.shahar);
console.log("Standart:", foydalanuvchi.manzil?.shahar ?? "noma'lum");
|| bilan: 50
?? bilan: 0
nom || : nomsiz
nom ?? :
rang ?? : qora
Shahar: undefined
Standart: noma'lum
if, else if, else #
function bahoAniqlash(ball) {
if (ball >= 90) {
return "A'lo";
} else if (ball >= 70) {
return "Yaxshi";
} else if (ball >= 50) {
return "Qoniqarli";
} else {
return "Qoniqarsiz";
}
}
const ballar = [95, 75, 55, 30];
for (const ball of ballar) {
console.log(`${ball} ball -> ${bahoAniqlash(ball)}`);
}
95 ball -> A'lo
75 ball -> Yaxshi
55 ball -> Qoniqarli
30 ball -> Qoniqarsiz
JavaScript bitta buyruq uchun qavssiz if ga ruxsat beradi:
if (shart) qiling();
Bu 2014-yilda Apple ning "goto fail" zaifligiga sabab bo'lgan naqshning qarindoshi - u yerda C kodida takrorlangan qator butun TLS tekshiruvini o'chirib qo'ygan edi.
JavaScript da ham xuddi shunday xato oson:
if (parolTogri)
kirishRuxsat();
logYozish(); // BU DOIM ISHLAYDI - if ga tegishli emas!
Chekinish chalg'itadi, lekin logYozish() shartdan tashqarida.
Qoida: har doim { } qo'ying, hatto bitta qator bo'lsa ham.
Ternar operator #
const yosh = 20;
// if/else
let holat;
if (yosh >= 18) {
holat = "Balog'atga yetgan";
} else {
holat = "Voyaga yetmagan";
}
// Ternar - bir qatorda
const holat2 = yosh >= 18 ? "Balog'atga yetgan" : "Voyaga yetmagan";
console.log(holat);
console.log(holat2);
// Shablon ichida
const soni = 1;
console.log(`${soni} ta xabar${soni === 1 ? "" : "lar"}`);
Balog'atga yetgan
Balog'atga yetgan
1 ta xabar
// O'QIB BO'LMAYDI
const natija = a ? b ? "x" : "y" : c ? "z" : "w";
Ikki darajadan oshsa - if/else ga o'ting yoki obyekt xaritasi
ishlating:
const xarita = {
kichik: "S",
orta: "M",
katta: "L"
};
const belgi = xarita[olcham] ?? "?";
Bu ko'p if dan ham, ichma-ich ternardan ham tozaroq.
switch #
function kunNomi(raqam) {
switch (raqam) {
case 1:
return "Dushanba";
case 2:
return "Seshanba";
case 3:
return "Chorshanba";
case 6:
case 7:
return "Dam olish kuni";
default:
return "Noma'lum";
}
}
for (const k of [1, 3, 6, 7, 9]) {
console.log(k, "->", kunNomi(k));
}
1 -> Dushanba
3 -> Chorshanba
6 -> Dam olish kuni
7 -> Dam olish kuni
9 -> Noma'lum
break ni unutmangswitch da break yozilmasa, bajarilish keyingi case ga
o'tib ketadi (fall-through):
switch (rang) {
case "qizil":
console.log("Qizil");
// break yo'q!
case "yashil":
console.log("Yashil"); // bu ham ishlaydi
break;
}
rang === "qizil" bo'lsa ikkala qator chiqadi.
Yuqoridagi misolda case 6: dan keyin break yo'qligi
ataylab - bu ikki holatni birlashtirish uchun ishlatiladigan
to'g'ri naqsh.
Diqqat: switch === bilan taqqoslaydi:
switch ("5") {
case 5: console.log("son"); break; // ishlamaydi
case "5": console.log("satr"); break; // ishlaydi
}
return ishlatsangiz break kerak emas - funksiya baribir
tugaydi.
%bilan sonning juft yoki toqligini aniqlang.- Manfiy son uchun musbat qoldiq oluvchi ifoda yozing.
sanoq++va++sanoqfarqini misolda ko'rsating."" == 0,0 == "0","" == "0"natijalarini tushuntiring.Number.isNaNvaisNaNfarqini sinang.||va??ni0qiymati bilan taqqoslang.?.bilan mavjud bo'lmagan ichki xossaga murojaat qiling.- Ball bo'yicha baho qaytaruvchi funksiya yozing.
- Ternar operator bilan ko'plik qo'shimchasini qo'shing.
switchdabreakni olib tashlab, natijani kuzating.
Xulosa #
%qoldiq operatori juft/toq, aylanma tanlovda ishlatiladi.- JavaScript da manfiy qoldiq bo'linuvchining ishorasini oladi.
===ishlating -==mantiqan noizchil va tranzitiv emas.- Yagona istisno:
qiymat == nullikkalasini birga tekshiradi. NaNo'ziga teng emas;Number.isNaNishlating.&&va||operandning o'zini qaytaradi, mantiqiy qiymat emas.??faqatnull/undefinedda ishlaydi -0va""o'tadi.?.mavjud bo'lmagan zanjirda xato o'rnigaundefinedberadi.ifda har doim{ }qo'ying.- Ternar operatorni ichma-ich yozmang - obyekt xaritasi afzal.
switch===bilan solishtiradi vabreaktalab qiladi.
Keyingi bo'limda sikllar bilan ishlashni o'rganamiz.
O‘qish tarixini saqlamoqchimisiz?
Tizimga kirsangiz, tugatgan bo‘limlaringiz saqlanadi va qoldirgan joyingizdan davom etasiz.
Xatolik topdingizmi?
Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.