Skip to main content

Які типи помилок бувають у JavaScript?

1. Error - базовий клас помилок

Це універсальний тип, від якого успадковуються всі інші помилки. Якщо не знаєш, який тип помилки підходить, можна використовувати просто Error.

javascript
throw new Error("Щось пішло не так!");

Властивості:

  • name - назва помилки ("Error")
  • message - опис
  • stack - трасування стека (показує, де сталася помилка)

2. ReferenceError - помилка посилання

Виникає, коли відбувається звернення до неіснуючої змінної або властивості, недоступної в поточній області видимості.

javascript
console.log(x); // ReferenceError: x is not defined

Також може виникати при неправильному використанні this.

3. TypeError - помилка типу

Виникає, коли операція застосовується до значення невідповідного типу або намагаються викликати те, що не є функцією.

javascript
let n = null; console.log(n.toString()); // TypeError: Cannot read properties of null
javascript
let func = 123; func(); // TypeError: func is not a function

4. RangeError - вихід за допустимі межі

Виникає, коли передане значення поза допустимим діапазоном.

javascript
new Array(-5); // RangeError: Invalid array length
javascript
(123.456).toFixed(200); // RangeError: toFixed() digits argument must be between 0 and 100

5. SyntaxError - синтаксична помилка

Помилка при порушенні синтаксису JavaScript. Рушій не може "розпарсити" код, тому програма навіть не запускається.

javascript
eval("if (true { console.log('hi'); }"); // SyntaxError: Unexpected token '{'

Такі помилки не можна спіймати try...catch, тому що вони відбуваються до початку виконання.

6. URIError - помилка в URI-функціях

Виникає, якщо функції encodeURI(), decodeURI(), encodeURIComponent() або decodeURIComponent() отримують некоректні дані.

javascript
decodeURIComponent("%"); // URIError: URI malformed

7. EvalError - помилка при використанні eval()

У сучасних реалізаціях трапляється рідко. Спочатку використовувалася, коли eval() застосовували некоректно.

javascript
throw new EvalError("Неправильне використання eval()");

8. (Додатково) AggregateError - набір помилок

Виникає, коли одна операція повертає одразу кілька помилок, наприклад при Promise.any().

javascript
Promise.any([ Promise.reject(new Error("Помилка 1")), Promise.reject(new Error("Помилка 2")), ]).catch(e => console.log(e.errors));

Вивід:

javascript
[Error: Помилка 1, Error: Помилка 2]

9. Користувацькі помилки (Custom Errors)

Можна створювати власні класи помилок, успадковуючись від Error:

javascript
class ValidationError extends Error { constructor(message) { super(message); this.name = "ValidationError"; } } throw new ValidationError("Некоректний email");

Вивід:

javascript
ValidationError: Некоректний email

Підсумкова таблиця

Тип помилкиКоли виникаєПриклад
ErrorБазовий клас для всіх помилокthrow new Error("Помилка!")
ReferenceErrorЗмінна не визначенаconsole.log(x)
TypeErrorНеправильний тип значенняnull.toString()
RangeErrorЗначення поза допустимим діапазономnew Array(-1)
SyntaxErrorПомилка в синтаксисіeval("if (true {")
URIErrorПомилка при кодуванні/декодуванні URIdecodeURI("%")
EvalErrorПомилка eval() (рідко використовується)throw new EvalError()
AggregateErrorДекілька помилок одразуPromise.any([...])

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.