JS keng tarqalgan xatolar
Ushbu bobda ba’zi keng tarqalgan JavaScript xatolar ko‘rsatilgan.
Tasodif operatoridan tasodifan foydalanish
Agar dasturchi tasodifan if operatorida taqqoslash operatori () o‘rniga tayinlash operatoridan (=) foydalansa, JavaScript dasturlari kutilmagan natijalarga olib kelishi mumkin.==
bu if operatori false qaytaradi (sifatida
kutilgan) chunki x
10 ga teng emas:
let x = 0;
if (x == 10)
O‘zingiz sinab ko‘ring »
bu if operatori trueni qaytaradi (ehtimol emas
kutilganidek), chunki 10
rost:
let x = 0;
if (x = 10)
O‘zingiz sinab ko‘ring »
bu if operatori falseni qaytaradi (ehtimol emas
kutilganidek), chunki 0
yolg‘on:
let x = 0;
if (x = 0)
O‘zingiz sinab ko‘ring »
Topshiriq har doim topshiriqning qiymatini qaytaradi.
Bo‘sh taqqoslash kutilmoqda
Oddiy taqqoslashda ma’lumotlar turi muhim emas. Ushbu if operatori qaytariladi
rost:
let x = 10;
let y = "10";
if (x == y)
O‘zingiz sinab ko‘ring »
Qattiq taqqoslaganda, ma’lumotlar turi muhim. Bu if operatori noto‘g‘ri bo‘lsa:
let x = 10;
let y = "10";
if (x === y)
O‘zingiz sinab ko‘ring »
switch operatorlarida qat’iy foydalanishni unutish keng tarqalgan xatodir
solishtirish:
Bu case switch alert oynasini chiqaradi:
let x = 10;
switch(x) {
case 10: alert("Hello");
}
O‘zingiz sinab ko‘ring »
bu case switch ogohlantirishni ko‘rsatmaydi:
let x = 10;
switch(x) {
case "10": alert("Hello");
}
O‘zingiz sinab ko‘ring »
Chalkash qo‘shish va bog‘lash
Qo‘shish - bu raqamlarni qo‘shish.
Birlashtirish (konkatenatsiya) — bu stringlarni qo‘shish.
JavaScript-da ikkala operatsiya ham bir xil + operatoridan foydalanadi.
Shu sababli, raqamni raqam sifatida qo‘shish raqamni string sifatida qo‘shishdan farq qiladi:
let x = 10;
x = 10 + 5; //
Now x is 15
let y = 10;
y += "5";
// Now y is "105"
O‘zingiz sinab ko‘ring »
Ikkita o‘zgaruvchini qo‘shganda, natijani taxmin qilish qiyin bo‘lishi mumkin:
let x = 10;
let y = 5;
let z = x + y; // Now z is 15
let x = 10;
let y = "5";
let z = x + y; // Now z is "105"
O‘zingiz sinab ko‘ring »
Floatlarni noto‘g‘ri tushunish
JavaScript-dagi barcha Numberlar 64-bitli Floating Point raqamlari (Floats) sifatida saqlanadi.
Barcha dasturlash tillari, shu jumladan JavaScript, aniq suzuvchi nuqta qiymatlari bilan bog‘liq qiyinchiliklarga ega:
let x = 0.1;
let y = 0.2;
let z = x + y
// the result in z will not be 0.3
O‘zingiz sinab ko‘ring »
Yuqoridagi muammoni hal qilish uchun u ko‘paytirish va bo‘lishga yordam beradi:
JavaScript stringini bir nechta qatorga bo‘lish
JavaScript sizga operatorni ikki qatorga bo‘lish imkonini beradi:
Biroq, String o‘rtasida operatorni buzish ishlamaydi:
Agar string ichida ko‘rsatmani qatorlarga bo‘lish kerak bo‘lsa, "teskari chiziq" dan foydalanishingiz kerak:
Nuqtali vergulni noto‘g‘ri qo‘yish
Noto‘g‘ri qo‘yilgan nuqtali vergul tufayli ushbu kod bloki x qiymatidan qat’iy nazar bajariladi:
if (x == 19);
{
// code block
}
O‘zingiz sinab ko‘ring »
return operatorini buzish
String oxiridagi operatorni avtomatik ravishda yopish JavaScript-ning standart xatti-harakati hisoblanadi.
Shu sababli, bu ikki misol bir xil natijani qaytaradi:
JavaScript shuningdek, operatorni ikki qatorga bo‘lish imkonini beradi.
Shu sababli, 3-misol ham xuddi shunday natijani qaytaradi:
Ammo, agar siz qaytish iborasini ikkita qatorda buzsangiz nima bo‘ladi:
Funksiya undefined qaytaradi!
Nima uchun? Chunki JavaScript sizni nazarda tutgan deb o‘ylagan:
Tushuntirish
Agar operator quyidagicha to‘liq bo‘lmasa:
let
JavaScript keyingi qatorni o‘qish orqali operatorni yakunlashga harakat qiladi:
power = 10;
Ammo bu operator to‘liq bo‘lgani uchun:
return
JavaScript uni avtomatik ravishda quyidagicha yopadi:
return;
Buning sababi, JavaScript-da nuqta-vergul bilan iboralarni yopish (tugatish) ixtiyoriy.
JavaScript String oxiridagi return operatorini yopadi, chunki u to‘liq operatordir.
return operatorini hech qachon buzmang.
Nomlangan indekslar bilan massivlarga kirish
Ko‘plab dasturlash tillari nomlangan indeksli massivlarni qo‘llab-quvvatlaydi.
Nomlangan indeksli Arraylar assotsiativ Arraylar (yoki heshlar) deb ataladi.
JavaScript nomlangan indeksli massivlarni qo‘llab-quvvatlamaydi.
JavaScript-da Arraylar raqamlangan indekslardan foydalanadi:
Misol
const person = [];
person[0] = "John";
person[1] = "Doe";
person[2] = 46;
person.length;
// person.length will return 3
person[0];
// person[0] will return "John"
O‘zingiz sinab ko‘ring »
JavaScript-da Objectlar nomlangan indekslardan foydalanadi.
Agar siz nomli indeksdan foydalansangiz, massivga kirishda JavaScript massivni standart obyektga qayta belgilaydi.
Avtomatik qayta aniqlashdan so‘ng, Array usullari va xususiyatlari aniqlanmagan yoki noto‘g‘ri natijalar beradi:
Misol:
const person = [];
person["firstName"] = "John";
person["lastName"] = "Doe";
person["age"] = 46;
person.length; // person.length will
return 0
person[0];
// person[0] will return undefined
O‘zingiz sinab ko‘ring »
Ta’riflarni vergul bilan tugatish
ECMAScript 5 da Object va Array ta’rifidagi orqa vergullar qonuniydir.
Obyektga misol:
person = {firstName:"John", lastName:"Doe", age:46,}
Array misoli:
points = [40, 100, 1, 5, 25, 10,];
Diqqat!
Internet Explorer 8 ishdan chiqadi.
JSON keyingi vergullarga ruxsat bermaydi.
JSON:
person = {"firstName":"John", "lastName":"Doe", "age":46}
JSON:
points = [40, 100, 1, 5, 25, 10];
Undefined null emas
JavaScript obyektlari, o‘zgaruvchilari, xususiyatlari va metodlari undefined bo‘lishi mumkin.
Bundan tashqari, bo‘sh JavaScript Objectlar null qiymatiga ega bo‘lishi mumkin.
Bu obyekt bo‘sh yoki yo‘qligini tekshirishni biroz qiyinlashtirishi mumkin.
Obyektning mavjudligini turi undefined ekanligini tekshirish orqali tekshirishingiz mumkin:
Lekin siz obyekt null ekanligini tekshira olmaysiz, chunki bu xatolikka olib keladi
obyekt undefined:
Noto‘g‘ri:
if (myObj === null)
Ushbu muammoni hal qilish uchun obyekt null emasligini sinab ko‘rishingiz kerak.
va undefined emas.
Ammo bu hali ham xatoga olib kelishi mumkin:
Noto‘g‘ri:
if (myObj !== null && typeof myObj !== "undefined")
Shu sababli, null emasligini tekshirishdan oldin undefined emasligini tekshirishingiz kerak:
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
