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)