Skip to content

JavaScript Keng Tarqalgan Xatolar (Common Mistakes)

Bu bob ba'zi keng tarqalgan JavaScript xatolarini ko'rsatadi.


Tayinlash operatorini tasodifiy ishlatish

Agar dasturchi if bayonotida taqqoslash operatori (==) o'rniga tasodifan tayinlash operatorini (=) ishlatsa, JavaScript dasturlari kutilmagan natijalar berishi mumkin.

Bu if bayonoti false qaytaradi (kutilganidek), chunki x 10 ga teng emas:

js
let x = 0;
if (x == 10)

Bu if bayonoti true qaytaradi (ehtimol kutilmagan), chunki 10 — true:

js
let x = 0;
if (x = 10)

Bu if bayonoti false qaytaradi (ehtimol kutilmagan), chunki 0 — false:

js
let x = 0;
if (x = 0)

Eslatma

Tayinlash har doim tayinlash qiymatini qaytaradi.


Yengil taqqoslashni kutish

Oddiy taqqoslashda ma'lumot turi ahamiyatga ega emas. Bu if bayonoti true qaytaradi:

js
let x = 10;
let y = "10";
if (x == y)

Qat'iy taqqoslashda ma'lumot turi muhim. Bu if bayonoti false qaytaradi:

js
let x = 10;
let y = "10";
if (x === y)

switch bayonotlari qat'iy taqqoslash ishlatishini unutish keng tarqalgan xato. Bu case switch ogohlantirishni ko'rsatadi:

js
let x = 10;
switch(x) {
  case 10: alert("Hello");
}

Bu case switch ogohlantirishni ko'rsatmaydi:

js
let x = 10;
switch(x) {
  case "10": alert("Hello");
}

Qo'shish va birlashtirish aralashishi

Qo'shish raqamlar qo'shish haqida. Birlashtirish satrlar qo'shish haqida. JavaScript-da ikkala amal bir xil + operatoridan foydalanadi.

js
let x = 10;
x = 10 + 5;       // Hozir x = 15

let y = 10;
y += "5";          // Hozir y = "105"

Ikki o'zgaruvchini qo'shganda, natijani oldindan bilish qiyin bo'lishi mumkin:

js
let x = 10;
let y = 5;
let z = x + y;     // z = 15

let x = 10;
let y = "5";
let z = x + y;     // z = "105"

Kasr sonlarni noto'g'ri tushunish

JavaScript-dagi barcha raqamlar 64-bitli suzuvchi nuqtali raqamlar sifatida saqlanadi. Barcha dasturlash tillari, shu jumladan JavaScript, aniq suzuvchi nuqtali qiymatlar bilan qiyinchilikka ega:

js
let x = 0.1;
let y = 0.2;
let z = x + y      // natija 0.3 bo'lmaydi

Muammoni hal qilish uchun ko'paytirish va bo'lish yordam beradi:

js
let z = (x * 10 + y * 10) / 10;       // z = 0.3

JavaScript satrini buzish

JavaScript bayonotni ikki qatorga bo'lishga ruxsat beradi:

js
let x =
"Hello World!";

Lekin satrning o'rtasida bayonotni buzish ishlamaydi:

js
let x = "Hello
World!";

Agar satrda bayonotni buzish kerak bo'lsa, backslash ishlating:

js
let x = "Hello \
World!";

Nuqtali vergulni noto'g'ri joylashtirish

Noto'g'ri joylashtirilgan nuqtali vergul sababli, bu kod bloki x qiymatidan qat'i nazar bajariladi:

js
if (x == 19);
{
  // kod bloki
}

Return bayonotini buzish

JavaScript qator oxirida bayonotni avtomatik yopishi JavaScript-ning standart xatti-harakatidir. Shuning uchun bu ikkita misol bir xil natijani qaytaradi:

js
// 1-misol
function myFunction(a) {
  let power = 10
  return a * power
}

// 2-misol
function myFunction(a) {
  let power = 10;
  return a * power;
}

Lekin return bayonotini ikki qatorga shunday buzsangiz:

js
function myFunction(a) {
  let
  power = 10;
  return
  a * power;
}

Funksiya undefined qaytaradi! Chunki JavaScript siz shuni nazarda tutgan deb o'ylaydi:

js
function myFunction(a) {
  let
  power = 10;
  return;        // avtomatik yopildi!
  a * power;
}

Ogohlantirish

Hech qachon return bayonotini buzmang.


Nomli indekslar bilan massivlarga kirish

JavaScript nomlangan indeksli massivlarni qo'llab-quvvatlamaydi. JavaScript-da massivlar raqamli indekslardan foydalanadi:

js
const person = [];
person[0] = "John";
person[1] = "Doe";
person[2] = 46;
person.length;     // 3 qaytaradi
person[0];         // "John" qaytaradi

Agar nomlangan indeks ishlatsangiz, JavaScript massivni standart obyektga qayta belgilaydi. Shundan so'ng massiv metodlari va xususiyatlari undefined yoki noto'g'ri natijalar beradi:

js
const person = [];
person["firstName"] = "John";
person["lastName"] = "Doe";
person["age"] = 46;
person.length;     // 0 qaytaradi
person[0];         // undefined qaytaradi

Ta'riflarni vergul bilan tugatish

Obyekt va massiv ta'riflarida oxirgi vergullar ECMAScript 5 da qonuniy.

js
// Obyekt
person = {firstName:"John", lastName:"Doe", age:46,}

// Massiv
points = [40, 100, 1, 5, 25, 10,];

Ogohlantirish

JSON-da oxirgi vergullar ruxsat etilmaydi.


Undefined va Null farq qiladi

JavaScript obyektlari, o'zgaruvchilari, xususiyatlari va metodlari undefined bo'lishi mumkin. Bundan tashqari, bo'sh JavaScript obyektlari null qiymatiga ega bo'lishi mumkin.

Turi undefined ekanligini tekshirib obyekt mavjudligini sinash mumkin:

js
if (typeof myObj === "undefined")

Lekin agar obyekt undefined bo'lsa, uni null ekanligini tekshirish mumkin emas:

js
// Noto'g'ri:
if (myObj === null)

// Noto'g'ri:
if (myObj !== null && typeof myObj !== "undefined")

null emasligini tekshirishdan oldin undefined emasligini tekshirish kerak:

js
// To'g'ri:
if (typeof myObj !== "undefined" && myObj !== null)