Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Що робить оператор throw?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)**`throw`** - оператор, який перериває виконання поточного коду і виштовхує виняток (помилку чи будь-який інший об'єкт). **Ключове:** після `throw` виконання поточного блока припиняється, і керування передається обробнику `catch`, якщо він є.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення## Визначення > `throw` - оператор, який **перериває виконання поточного коду** і **виштовхує виняток** (помилку чи будь-який інший об'єкт). ## Синтаксис ```javascript throw вираз; ``` Де `вираз` може бути **будь-яким JS-значенням**: об'єктом, числом, рядком, логічним значенням тощо. Але найчастіше виштовхують екземпляр класу `Error`. ## Приклад 1. Просте використання ```javascript throw "Щось пішло не так!"; ``` У консолі: ```javascript Uncaught Щось пішло не так! ``` Тут програма негайно зупиняється, тому що **виняток не було впіймано**. ## Приклад 2. З блоком try...catch ```javascript try { throw new Error("Сталася помилка під час виконання!"); } catch (err) { console.log("Впіймано:", err.message); } ``` Що відбувається: 1. `throw` створює виняток - об'єкт `Error`. 2. Виконання `try` переривається. 3. Керування передається в `catch`. 4. Помилку опрацьовано, програма продовжується. Вивід: ```javascript Впіймано: Сталася помилка під час виконання! ``` ## Приклад 3. Використання `throw` для перевірки вхідних даних ```javascript function divide(a, b) { if (typeof a !== "number" || typeof b !== "number") { throw new TypeError("Обидва аргументи мають бути числами!"); } if (b === 0) { throw new Error("Ділення на нуль неможливе!"); } return a / b; } try { console.log(divide(5, 0)); } catch (e) { console.error("Помилка:", e.message); } ``` Вивід: ```javascript Помилка: Ділення на нуль неможливе! ``` ## Приклад 4. Можна виштовхувати не тільки Error ```javascript try { throw { message: "Помилка мережі", code: 500 }; } catch (e) { console.log(e.message, e.code); } ``` Вивід: ```javascript Помилка мережі 500 ``` Але зазвичай так **не рекомендується** - краще завжди використовувати стандартні класи помилок (`Error`, `TypeError`, `RangeError` тощо), щоб зберегти читабельність і сумісність. ## Приклад 5. Після throw код не виконується ```javascript console.log("до throw"); throw new Error("помилка!"); console.log("після throw"); // не виконається ``` Після `throw` виконання поточного блока **припиняється**, і керування передається обробнику помилок (якщо він є). ## Візуально ```javascript try { // виштовхуємо виняток throw new Error("Помилка!"); } catch (e) { // ловимо виняток console.log("Впіймано:", e.message); } finally { console.log("Цей блок виконається завжди"); } ``` ## Підсумок | Пункт | Опис | | --- | --- | | **Призначення** | Примусово виштовхує виняток (помилку) | | **Тип значення** | Можна виштовхнути будь-який тип даних (зазвичай `Error`) | | **Ефект** | Перериває виконання поточного блока | | **Використовується з** | `try...catch` для обробки помилок | | **Після throw** | Код далі не виконується |Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.