JS оператор throw
Загальний опис
throw — це ключове слово JavaScript, яке використовується для генерації винятків, що сигналізують про помилки або інші аномалії в роботі програми. Коли throw викликається, виконання коду негайно припиняється, і управління передається найближчому блоку catch або механізму обробки помилок.
У throw можна передати будь-яке значення: об'єкт, рядок, число або навіть функцію. Найчастіше передають об'єкт помилки (Error), який містить інформацію про проблему.
Основна структура:
function divide(a, b) {
if (b === 0) {
throw new Error("Ділення на нуль заборонено.");
}
return a / b;
}
У цьому прикладі, якщо b дорівнює нулю, програма зупинить виконання і створить виняток із повідомленням.
Як працює разом з try...catch:
try {
console.log(divide(10, 0));
} catch (error) {
console.error("Помилка:", error.message);
}
Блок catch обробляє виняток і дозволяє уникнути аварійного завершення програми.
throw також може використовуватися з іншими типами даних, наприклад:
throw "Простий текстовий виняток";
throw 404; // Числовий код помилки
throw {message: "Щось пішло не так", code: 500};
Загалом, throw — потужний інструмент для керування помилками в програмному коді, який дозволяє дотримуватися принципу "fail fast" (швидке виявлення проблем).
- Порада
-
Обробляйте винятки обережно. Пам’ятайте, що необроблені винятки можуть завершити виконання всієї програми. Завжди використовуйте
автор: Bondthrowразом із блокамиtry...catchдля захисту критичних ділянок коду. - Порада
-
Уникайте використання простих типів (наприклад, рядків або чисел) у
автор: Bondthrow. Надавайте перевагу об'єктамError, оскільки вони надають більше інформації, наприклад, стек викликів (stack) та ім’я помилки (name). - Порада
-
Створюйте власні класи помилок, успадковані від
Error. Це допоможе чіткіше визначити типи помилок:
автор: Bondclass ValidationError extends Error { constructor(message) { super(message); this.name = "ValidationError"; } } throw new ValidationError("Некоректні дані!");
Синтаксис
throw expression;
Переглядачі
| Переглядач | |||||
|---|---|---|---|---|---|
| 1 | 1 | 1 | 4 | 12 |
| Переглядач | ||||
|---|---|---|---|---|
| 4.4 | 18 | 4 | 1 |
| Переглядач | ||
|---|---|---|
| 0.10.0 | 1.0 |
Приклади
+ запропонувати свій приклад у пісочниці
У цьому прикладі throw використовується для зупинки виконання, якщо дані не відповідають критеріям. Це корисно для підтримання чистоти даних.
function validateUser(user) {
if (!user.name) throw new Error("Ім'я обов'язкове.");
if (user.age < 18) throw new Error("Користувач повинен бути старше 18 років.");
return "Користувач успішно верифікований.";
}
try {
console.log(validateUser({ name: "Іван", age: 15 }));
} catch (error) {
console.error("Помилка валідації:", error.message);
}
Тут створено власний клас помилок NetworkError, який дозволяє розмежувати різні типи винятків і обробляти їх по-різному.
class NetworkError extends Error {
constructor(message) {
super(message);
this.name = "NetworkError";
}
}
function fetchData(url) {
if (!url.startsWith("https://")) {
throw new NetworkError("URL повинен починатися з 'https://'.");
}
// Логіка запиту
return "Дані завантажено.";
}
try {
console.log(fetchData("http://example.com"));
} catch (error) {
if (error instanceof NetworkError) {
console.error("Мережева помилка:", error.message);
} else {
console.error("Невідома помилка:", error);
}
}
Цей приклад інтерактивний: користувач може вводити значення та перевіряти їхню коректність. Якщо дані некоректні, вони побачать відповідне повідомлення про помилку. Це зручно для навчання роботі з винятками та забезпечення правильної взаємодії з користувачем.
Коментарі
Коментарів ще немає — будьте першим!