Що таке виняток (exception)?
Визначення
Виняток (exception) - це подія, яка виникає під час виконання програми, коли трапляється помилка, і нормальне виконання коду переривається.
Іншими словами, виняток - це "сигнал" про помилкову ситуацію, який рушій JavaScript "викидає" (throw) і який можна "спіймати" (catch).
Різниця між error та exception
- Error (помилка) - це об'єкт, який містить інформацію про те, що пішло не так.
- Exception (виняток) - це момент, коли цей об'єкт помилки був викинутий у процесі виконання.
Іншими словами:
- Error - це дані,
- Exception - це подія викидання цих даних.
Приклад: як виникає виняток
javascript
function divide(a, b) {
if (b === 0) {
throw new Error("Ділення на нуль неможливе!");
}
return a / b;
}
try {
divide(5, 0); // Тут виникає виняток
} catch (err) {
console.log("Спіймано виняток:", err.message);
}Що відбувається:
- Виконується функція
divide. - Умова
b === 0істинна, і рушій "викидає" (throw) об'єкт помилки. - Ця подія - і є винятком.
- JavaScript починає шукати найближчий
try...catch. - Блок
catchперехоплює виняток, і програма продовжує роботу.
Механізм винятків (try / throw / catch / finally)
| Ключове слово | Що робить |
|---|---|
try | Блок, де може статись помилка |
throw | Викидає виняток |
catch | Перехоплює виняток і обробляє його |
finally | Виконується завжди - навіть якщо була помилка |
Приклад:
javascript
try {
throw new Error("Помилка мережі");
} catch (error) {
console.log("Спіймано виняток:", error.message);
} finally {
console.log("Цей код виконається завжди");
}Винятки бувають двох видів
- Автоматичні (необроблені) Виникають, коли рушій сам викидає помилку:
javascript
console.log(a); // ReferenceError → виняток викинуто автоматично- Користувацькі (явні) Коли програміст сам викидає виняток:
javascript
throw new Error("Щось пішло не так!");Що відбувається, якщо виняток не спіймано
Якщо виняток не перехоплено (catch відсутній), він "спливає" по стеку викликів.
Якщо в підсумку ніхто його не спіймав - програма завершується з помилкою:
javascript
function a() { b(); }
function b() { throw new Error("Помилка!"); }
a(); // Помилка завершить виконанняКоротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.