Які типи помилок бувають у JavaScript?
1. Error - базовий клас помилок
Це універсальний тип, від якого успадковуються всі інші помилки.
Якщо не знаєш, який тип помилки підходить, можна використовувати просто Error.
throw new Error("Щось пішло не так!");Властивості:
name- назва помилки ("Error")message- описstack- трасування стека (показує, де сталася помилка)
2. ReferenceError - помилка посилання
Виникає, коли відбувається звернення до неіснуючої змінної або властивості, недоступної в поточній області видимості.
console.log(x); // ReferenceError: x is not definedТакож може виникати при неправильному використанні this.
3. TypeError - помилка типу
Виникає, коли операція застосовується до значення невідповідного типу або намагаються викликати те, що не є функцією.
let n = null;
console.log(n.toString()); // TypeError: Cannot read properties of nulllet func = 123;
func(); // TypeError: func is not a function4. RangeError - вихід за допустимі межі
Виникає, коли передане значення поза допустимим діапазоном.
new Array(-5); // RangeError: Invalid array length(123.456).toFixed(200); // RangeError: toFixed() digits argument must be between 0 and 1005. SyntaxError - синтаксична помилка
Помилка при порушенні синтаксису JavaScript. Рушій не може "розпарсити" код, тому програма навіть не запускається.
eval("if (true { console.log('hi'); }");
// SyntaxError: Unexpected token '{'Такі помилки не можна спіймати
try...catch, тому що вони відбуваються до початку виконання.
6. URIError - помилка в URI-функціях
Виникає, якщо функції encodeURI(), decodeURI(), encodeURIComponent() або decodeURIComponent() отримують некоректні дані.
decodeURIComponent("%");
// URIError: URI malformed7. EvalError - помилка при використанні eval()
У сучасних реалізаціях трапляється рідко.
Спочатку використовувалася, коли eval() застосовували некоректно.
throw new EvalError("Неправильне використання eval()");8. (Додатково) AggregateError - набір помилок
Виникає, коли одна операція повертає одразу кілька помилок, наприклад при Promise.any().
Promise.any([
Promise.reject(new Error("Помилка 1")),
Promise.reject(new Error("Помилка 2")),
]).catch(e => console.log(e.errors));Вивід:
[Error: Помилка 1, Error: Помилка 2]9. Користувацькі помилки (Custom Errors)
Можна створювати власні класи помилок, успадковуючись від Error:
class ValidationError extends Error {
constructor(message) {
super(message);
this.name = "ValidationError";
}
}
throw new ValidationError("Некоректний email");Вивід:
ValidationError: Некоректний emailПідсумкова таблиця
| Тип помилки | Коли виникає | Приклад |
|---|---|---|
| Error | Базовий клас для всіх помилок | throw new Error("Помилка!") |
| ReferenceError | Змінна не визначена | console.log(x) |
| TypeError | Неправильний тип значення | null.toString() |
| RangeError | Значення поза допустимим діапазоном | new Array(-1) |
| SyntaxError | Помилка в синтаксисі | eval("if (true {") |
| URIError | Помилка при кодуванні/декодуванні URI | decodeURI("%") |
| EvalError | Помилка eval() (рідко використовується) | throw new EvalError() |
| AggregateError | Декілька помилок одразу | Promise.any([...]) |
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.