JS xatolar
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 Type | Misol | Xato |
|---|---|---|
| Referans xatosi | fname = foo; | foo is not defined |
| Referans xatosi | let 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.
| Xato | Misol | Error Message |
|---|---|---|
| TypeError | anna(5); | anna is not a function |
| Type Error | let 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 Type | Misol | Error Message |
|---|---|---|
| RangeError | new Array(-1); | Invalid array length |
| RangeError | num.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 Type | Misol | Error Message |
|---|---|---|
| URIError | decodeURI("%%%"); | 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.
| Xato | Misol | Xato |
|---|---|---|
| SyntaxError | fname = "John); | Invalid or unexpected token ) |
| SyntaxError | Math.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.
Shuningdek qarang:
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
