JS keng tarqalgan xatolar


Ushbu bobda ba’zi keng tarqalgan JavaScript xatolar ko‘rsatilgan.


ULASHISH

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:

Misol

let z = (x * 10 + y * 10) / 10;       // z will be 0.3
O‘zingiz sinab ko‘ring »

JavaScript stringini bir nechta qatorga bo‘lish

JavaScript sizga operatorni ikki qatorga bo‘lish imkonini beradi:

1-misol

let x =
"Hello World!";
O‘zingiz sinab ko‘ring »

Biroq, String o‘rtasida operatorni buzish ishlamaydi:

2-misol

let x = "Hello
World!";
O‘zingiz sinab ko‘ring »

Agar string ichida ko‘rsatmani qatorlarga bo‘lish kerak bo‘lsa, "teskari chiziq" dan foydalanishingiz kerak:

3-misol

let x = "Hello \
World!";
O‘zingiz sinab ko‘ring »

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:

1-misol

function myFunction(a) {
  let power = 10 
  return a * power
}
O‘zingiz sinab ko‘ring »

2-misol

function myFunction(a) {
  let power = 10;
  return a * power;
}
O‘zingiz sinab ko‘ring »

JavaScript shuningdek, operatorni ikki qatorga bo‘lish imkonini beradi.

Shu sababli, 3-misol ham xuddi shunday natijani qaytaradi:

3-misol

function myFunction(a) {
  let
  power = 10; 
  return a * power;
}
O‘zingiz sinab ko‘ring »

Ammo, agar siz qaytish iborasini ikkita qatorda buzsangiz nima bo‘ladi:

4-misol

function myFunction(a) {
  let
  power = 10; 
  return
  a * power;
}
O‘zingiz sinab ko‘ring »

Funksiya undefined qaytaradi!

Nima uchun? Chunki JavaScript sizni nazarda tutgan deb o‘ylagan:

5-misol

function myFunction(a) {
  let
  power = 10; 
  return;
  a * power;
}
O‘zingiz sinab ko‘ring »

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:

Misol:

if (typeof myObj === "undefined")
O‘zingiz sinab ko‘ring »

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:

To‘g‘ri:

if (typeof myObj !== "undefined" && myObj !== null)
O‘zingiz sinab ko‘ring »


W3Schools Pathfinder

Yutuqlaringizni kuzating – bu bepul!