Що робить конструкція try...catch?
Загальний сенс
try...catchпотрібен, щоб код не "падав" при помилці, а замість цього реагував на неї контрольовано: показати повідомлення, повторити дію, записати лог тощо.
Синтаксис
javascript
try {
// код, у якому може статися помилка
} catch (error) {
// код, який виконається, якщо помилка виникла
}Як це працює
- Код у блоці
tryвиконується порядково. - Якщо всередині
tryвиникає помилка, виконанняtryпереривається, і керування передається вcatch. - Якщо помилок немає - блок
catchпропускається. - Після
try...catchпрограма продовжує виконання далі.
Приклад 1. Без try...catch - програма падає
javascript
console.log("Початок");
JSON.parse("невалідний JSON"); // SyntaxError
console.log("Кінець"); // не виконаєтьсяВивід:
javascript
Uncaught SyntaxError: Unexpected token н in JSONПриклад 2. З try...catch - програма продовжує працювати
javascript
console.log("Початок");
try {
JSON.parse("невалідний JSON");
} catch (err) {
console.log("Помилку зловлено:", err.message);
}
console.log("Кінець");Вивід:
javascript
Початок
Помилку зловлено: Unexpected token н in JSON at position 0
КінецьПомилку оброблено, програма не впала.
Блок finally (необов'язковий)
Можна додати третій блок - finally. Він виконується завжди, незалежно від того, була помилка чи ні.
javascript
try {
console.log("Виконуємо try");
throw new Error("Помилка!");
} catch (err) {
console.log("Зловили:", err.message);
} finally {
console.log("Цей код виконається в будь-якому випадку");
}Вивід:
javascript
Виконуємо try
Зловили: Помилка!
Цей код виконається в будь-якому випадкуЧасто
finallyвикористовують для очищення ресурсів: закрити з'єднання, зупинити таймер, видалити тимчасові файли тощо.
Можна використовувати з throw
try...catch часто застосовується разом з оператором throw, щоб вручну кинути виняток:
javascript
function divide(a, b) {
if (b === 0) throw new Error("Ділення на нуль!");
return a / b;
}
try {
console.log(divide(10, 0));
} catch (e) {
console.log("Помилка:", e.message);
}Особливості поведінки
| Поведінка | Опис |
|---|---|
catch ловить лише runtime-помилки | Синтаксичні помилки (SyntaxError під час парсингу коду) не ловляться |
Помилка всередині catch - не ловиться тим самим try | Її потрібно обгортати у другий try...catch |
try...catch може бути вкладеним | Можна обробляти різні типи помилок на різних рівнях |
Приклад 3. Вкладені try...catch
javascript
try {
try {
throw new TypeError("Невірний тип");
} catch (e) {
console.log("Внутрішній catch:", e.message);
throw new Error("Нова помилка");
}
} catch (e) {
console.log("Зовнішній catch:", e.message);
}Вивід:
javascript
Внутрішній catch: Невірний тип
Зовнішній catch: Нова помилкаПідсумок
| Елемент | Призначення |
|---|---|
try | Код, де можлива помилка |
catch | Обробляє помилку, якщо вона виникла |
error | Змінна, у якій зберігається об'єкт помилки |
finally | Виконується завжди, після try/catch |
throw | Генерує виняток, який ловить catch |
Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.