Чем отличаются throw 'message' и throw new Error('message')? throw 'message': выбрасывает примитив string и не формирует стек ошибки throw new Error('message'): создаёт объект Error со стеком вызовов Error предоставляет диагностические данные: stack trace и имя ошибки объекты Error удобнее перехватывать и записывать в логи это соответствует принятой практике JavaScript и Node.js и упрощает отладку throw 'message' хуже объясняет причину сбоя и затрудняет трассировку для единообразия и диагностики обычно выбирают throw new Error
В чем разница между throw 'message' и throw new Error('message')?
Чем отличаются throw 'message' и throw new Error('message')? throw 'message': выбрасывает примитив string и не формирует стек ошибки throw new Error('message'): создаёт объект Error со стеком вызовов Error…
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Чем отличаются throw 'message' и throw new Error('message')?
- throw 'message': выбрасывает примитив string и не формирует стек ошибки
- throw new Error('message'): создаёт объект Error со стеком вызовов
- Error предоставляет диагностические данные: stack trace и имя ошибки
- объекты Error удобнее перехватывать и записывать в логи
- это соответствует принятой практике JavaScript и Node.js и упрощает отладку
- throw 'message' хуже объясняет причину сбоя и затрудняет трассировку
- для единообразия и диагностики обычно выбирают throw new Error
Развёрнутый ответ
Краткий ответ
В JavaScript различие между throw 'message' и throw new Error('message') определяется типом выбрасываемого значения. В первом варианте исключением становится обычная строка, а во втором создаётся объект класса Error. Помимо сообщения, такой объект содержит данные, полезные при отладке, включая стек вызовов.
Основные особенности
- Тип исключения:
throw 'message'передаёт строку без метаданных. Выражениеthrow new Error('message')создаёт полноценный объект с полямиmessage,nameи свойствомstack, поэтому причину сбоя искать проще. - Перехват и проверка: объект
Errorпозволяет удобнее определять тип исключения черезinstanceof Error. При выбросе строки остаётся ориентироваться на её текст, что менее надёжно и менее удобно. - Совместимость и стандарты: общепринятый подход в JavaScript — выбрасывать объекты Error либо их наследников, например
TypeErrorиRangeError. Это повышает понятность и упрощает сопровождение кода.
Пример из практики
В production-коде почти всегда используют throw new Error(...) или собственные классы ошибок. Так проще журналировать сбои, например отправлять их в Sentry, и анализировать их при отладке. Выброс строк встречается редко — главным образом в простых учебных примерах, поскольку он усложняет диагностику и делает поведение системы менее предсказуемым.