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:
let x = 0;
if (x == 10)Bu if bayonoti true qaytaradi (ehtimol kutilmagan), chunki 10 — true:
let x = 0;
if (x = 10)Bu if bayonoti false qaytaradi (ehtimol kutilmagan), chunki 0 — false:
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:
let x = 10;
let y = "10";
if (x == y)Qat'iy taqqoslashda ma'lumot turi muhim. Bu if bayonoti false qaytaradi:
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:
let x = 10;
switch(x) {
case 10: alert("Hello");
}Bu case switch ogohlantirishni ko'rsatmaydi:
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.
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:
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:
let x = 0.1;
let y = 0.2;
let z = x + y // natija 0.3 bo'lmaydiMuammoni hal qilish uchun ko'paytirish va bo'lish yordam beradi:
let z = (x * 10 + y * 10) / 10; // z = 0.3JavaScript satrini buzish
JavaScript bayonotni ikki qatorga bo'lishga ruxsat beradi:
let x =
"Hello World!";Lekin satrning o'rtasida bayonotni buzish ishlamaydi:
let x = "Hello
World!";Agar satrda bayonotni buzish kerak bo'lsa, backslash ishlating:
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:
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:
// 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:
function myFunction(a) {
let
power = 10;
return
a * power;
}Funksiya undefined qaytaradi! Chunki JavaScript siz shuni nazarda tutgan deb o'ylaydi:
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:
const person = [];
person[0] = "John";
person[1] = "Doe";
person[2] = 46;
person.length; // 3 qaytaradi
person[0]; // "John" qaytaradiAgar nomlangan indeks ishlatsangiz, JavaScript massivni standart obyektga qayta belgilaydi. Shundan so'ng massiv metodlari va xususiyatlari undefined yoki noto'g'ri natijalar beradi:
const person = [];
person["firstName"] = "John";
person["lastName"] = "Doe";
person["age"] = 46;
person.length; // 0 qaytaradi
person[0]; // undefined qaytaradiTa'riflarni vergul bilan tugatish
Obyekt va massiv ta'riflarida oxirgi vergullar ECMAScript 5 da qonuniy.
// 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:
if (typeof myObj === "undefined")Lekin agar obyekt undefined bo'lsa, uni null ekanligini tekshirish mumkin emas:
// Noto'g'ri:
if (myObj === null)
// Noto'g'ri:
if (myObj !== null && typeof myObj !== "undefined")null emasligini tekshirishdan oldin undefined emasligini tekshirish kerak:
// To'g'ri:
if (typeof myObj !== "undefined" && myObj !== null)