Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Що робить конструкція try...catch?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)**`try...catch`** - конструкція, яка дає змогу коду не "падати" при помилці: код у блоці `try` виконується, і якщо в ньому виникає помилка, керування одразу передається в блок `catch`, де її можна обробити контрольовано. **Ключове:** `catch` ловить лише runtime-помилки (не синтаксичні), а необов'язковий блок `finally` виконується завжди, незалежно від того, була помилка чи ні.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення## Загальний сенс > `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 |Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.