← Все вопросы

throw в JS — как правильно бросать и ловить ошибки?

Задан 11 месяцев назад1.1к просмотров2 ответа
4

Читаю про обработку ошибок и наткнулся на throw. Не очень понял: зачем самому бросать ошибку, если можно просто вернуть null или вывести console.log?

Как вообще пишется js throw и как потом эту ошибку поймать, чтобы программа не падала целиком? Можно простой пример?

2 ответа

12
✓ Принятый ответ — помог автору

throw нужен, чтобы остановить выполнение и сказать «дальше так нельзя». Это сигнал об ошибке, который можно перехватить и аккуратно обработать, вместо того чтобы программа продолжала работать с мусорными данными.

Бросают обычно объект ошибки:

function divide(a, b) {
  if (b === 0) {
    throw new Error('Делить на ноль нельзя');
  }
  return a / b;
}

А ловят через try/catch:

try {
  const result = divide(10, 0);
  console.log(result);
} catch (err) {
  console.log('Поймали ошибку:', err.message);
} finally {
  console.log('Этот блок выполнится в любом случае');
}

Что здесь важно:

  • как только сработал throw, выполнение блока try прерывается и управление прыгает в catch;
  • в err приходит сам объект ошибки, у него есть .message и .name;
  • finally выполнится всегда — и при ошибке, и без неё (удобно закрывать что-то, освобождать ресурсы).

Почему throw new Error(...), а не просто throw 'текст'? Потому что у Error есть стек вызовов — будет видно, откуда именно прилетела ошибка. Это сильно помогает при отладке.

4

Добавлю про частую ошибку новичков: технически можно кинуть что угодно — throw 'строка', throw 42. Но так делать не надо.

Всегда бросай throw new Error('...') (или наследников вроде TypeError). Тогда в catch у тебя всегда будет нормальный объект с .message и стектрейсом, и не придётся гадать, строка там прилетела или число.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект