JS xatolar

ULASHISH

Xatolar albatta bo‘ladi!

JavaScript kodini bajarishda turli xatolar yuzaga kelishi mumkin.

Xatolar dasturchi tomonidan kodlash xatolari, noto‘g‘ri kiritish natijasida yuzaga kelgan xatolar va boshqa kutilmagan hodisalar bo‘lishi mumkin:

  • Murojaat xatolari (ReferenceError)
  • Type Errors
  • Diapazon xatolari
  • URI Errors
  • Syntax Errors
  • Eval Error (deprecated)
  • Silent Errors (next chapter)

JavaScript xatolarini qanday qayta ishlash kerak

try operatori kod blokini belgilash imkonini beradi bajarilayotganda xatolar uchun sinovdan o‘tkazildi.

catch operatori kod blokini aniqlash imkonini beradi Agar try blokida xatolik yuzaga kelsa, bajariladi.

JavaScript operatorlari try va catch juft bo‘lib keling:

try {
  Block of code to try
} catch(err) {
  Block of code to handle errors
}

Murojaat xatolari (ReferenceError)

Mavjud bo‘lmagan o‘zgaruvchidan foydalansangiz (unga murojaat qilsangiz), ReferenceError yuzaga keladi.

Error TypeMisolXato
Referans xatosifname = foo; foo is not defined
Referans xatosilet x = y;
let y = 5;
Cannot access y before initialization

Misollar

Mavjud bo‘lmagan o‘zgaruvchidan foydalana olmaysiz:

let x = 5;

try {
  x = y + 1;
} catch(err) {
  let text = err.name;
}
O‘zingiz sinab ko‘ring »

O‘zgaruvchiga u initsializatsiya qilinishidan oldin murojaat qilib bo‘lmaydi:

try {
  let x = y;
  let y = 5;
} catch(err) {
  let text = err.name;
}
O‘zingiz sinab ko‘ring »

JavaScript tip xatolari (TypeError)

Type Error qiymat noto‘g‘ri turdagi yoki operatsiya bo‘lsa paydo bo‘ladi bu turda yaroqsiz.

XatoMisolError Message
TypeErroranna(5);anna is not a function
Type Errorlet num = 1;
num.toUpperCase();
num.toUpperCase is not a function

Misollar

anna() funksiya emas:

let anna = 5;
try {
  anna(5);
} catch(err) {
  let text = err.name;
}
O‘zingiz sinab ko‘ring »

Sonni katta harflarga o‘tkazib bo‘lmaydi:

let num = 1;
try {
  num.toUpperCase();
} catch(err) {
  let text = err.name;
}
O‘zingiz sinab ko‘ring »


JavaScript diapazon xatolari (RangeError)

RangeError qiymat o‘zining haqiqiy diapazonidan tashqarida bo‘lganda paydo bo‘ladi.

Error TypeMisolError Message
RangeErrornew Array(-1);Invalid array length
RangeErrornum.toPrecision(500);toPrecision() argument must be between 1 and 100

Misollar

Siz Array elementlari sonini -1 ga o‘rnatolmaysiz:

try {
new Array(-1);
} catch(err) {
  let text = err.name;
}
O‘zingiz sinab ko‘ring »

Raqamning muhim raqamlari sonini 500 ga o‘rnatib bo‘lmaydi:

let num = 1;

try {
  num.toPrecision(500);   // A number cannot have 500 significant digits
} catch(err) {
  let text = err.name;
}
O‘zingiz sinab ko‘ring »

JavaScript URI xatolari

(Uniform Resource Identifier xatolari)

Agar siz URI funksiyasida ruxsat berilmagan maxsus belgilardan foydalansangiz, URIError yuzaga keladi:

Error TypeMisolError Message
URIErrordecodeURI("%%%");URI malformed

Misol

try {
  decodeURI("%%%");   // You cannot URI decode percent signs
} catch(err) {
  document.getElementById("demo").innerHTML = err.name;
}
O‘zingiz sinab ko‘ring »

JavaScript sintaksis xatolari

Kod JavaScript’ning grammatika qoidalarini buzganda Syntax Error yuzaga keladi.

XatoMisolXato
SyntaxErrorfname = "John);Invalid or unexpected token )
SyntaxErrorMath.round(4.6;Missing ) after argument list

Misol

Ushbu misolda biz stringni yopmaslik xatosiga yo‘l qo‘ydik:

// This line cannot be parsed by JavaScript
let fName = "John);

// Execution stops here
O‘zingiz sinab ko‘ring »

Yuqoridagi operator xatoni keltirib chiqaradi: noto‘g‘ri yoki kutilmagan token

Dasturning bajarilishi to‘xtatiladi!

Sintaksis xatolarini ushlab bo‘lmaydi

  • Sintaksis xatolarini try...catch orqali ushlab bo‘lmaydi
  • Syntax errors happen before runtime

Misol

Quyidagi kod xatoga olib kelishi kerak, ammo bunday qilmaydi:

try {
  let x = Math.round(4.6;)
} catch(err) {
  let text = err.name + " " + err.description;
}
O‘zingiz sinab ko‘ring »

Sintaksis muammosi

Math.round(4.6;)

Yuqoridagi qator sintaktik jihatdan yaroqsiz JavaScript. Qavslar ichida qo‘shimcha nuqtali vergul qo‘yilgan. To‘g‘ri sintaksis bo‘lishi kerak:

Math.round(4.6);

Why

Gap shundaki, brauzer sintaktik xatolarni qanday hal qiladi:

JavaScript dvigateli skriptni ishga tushirishdan oldin SyntaxError chiqaradi.

Sintaksis xatolar try...catch bloki bajarilishidan oldin aniqlanadi.

Bu try bloki umuman boshlanmasligini bildiradi. Skript shunchaki ishga tushmaydi (let text = qiymati yangilanmaydi).

Brauzer konsoli (F12 → Console yorlig‘i) quyidagiga o‘xshash xabarni ko‘rsatadi:

Uncaught SyntaxError: missing ) after argument list.


JavaScript eval xatosi

EvalError eval() funksiyasidagi xatoni bildiradi.

JavaScript’ning yangi versiyalari EvalError chiqarmaydi.

O‘rniga SyntaxError’dan foydalaning.




W3Schools Pathfinder

Yutuqlaringizni kuzating – bu bepul!