Skip to main content

Що робить конструкція try...catch?

Загальний сенс

try...catch потрібен, щоб код не "падав" при помилці, а замість цього реагував на неї контрольовано: показати повідомлення, повторити дію, записати лог тощо.


Синтаксис

javascript
try { // код, у якому може статися помилка } catch (error) { // код, який виконається, якщо помилка виникла }

Як це працює

  1. Код у блоці try виконується порядково.
  2. Якщо всередині try виникає помилка, виконання try переривається, і керування передається в catch.
  3. Якщо помилок немає - блок catch пропускається.
  4. Після 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

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