Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Які типи помилок бувають у JavaScript?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)**У JavaScript** є кілька вбудованих типів помилок, що успадковуються від базового класу `Error`: `ReferenceError`, `TypeError`, `RangeError`, `SyntaxError`, `URIError`, `EvalError` та `AggregateError`. **Ключове:** якщо тип помилки невідомий, можна використовувати просто `Error`, а власні типи створюють, успадковуючись від нього.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення## 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** | Помилка при кодуванні/декодуванні URI | `decodeURI("%")` | | **EvalError** | Помилка `eval()` (рідко використовується) | `throw new EvalError()` | | **AggregateError** | Декілька помилок одразу | `Promise.any([...])` |Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.