Выбор ответа Junior Ошибки обновлено

Почему не стоит бросать строку

Вопрос

Чем плох код throw 'Пользователь не найден'?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: У строки нет стека, instanceof Error ложен, к ней не добавить cause. Бросить можно любое значение, это не синтаксическая ошибка, и catch получит строку.

Варианты ответа

  1. Это SyntaxError: бросать через throw можно только объекты и их наследников
  2. У строки нет стека, instanceof Error ложен, к ней не добавить causeправильный ответ
  3. Строку нельзя поймать в catch: она уйдёт сразу в глобальный обработчик
  4. Строку поймает только finally, а catch ждёт объект с полем message

Разбор

Бросить можно любое значение, это не синтаксическая ошибка, и catch получит строку. Но при отладке без стека непонятно, где ошибка возникла; проверки instanceof Error и обработчики, ожидающие err.message, сломаются, а Sentry и подобные сервисы покажут её хуже. finally вообще не получает ошибку. Поэтому бросают new Error(...) или свои наследники.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме