Вопрос проверяет понимание обработки ошибок в JavaScript.
throw 'message' — выбрасывает строку, но без стека вызовов и деталей ошибки.
throw new Error('message') — создает объект ошибки с stack, name и другими свойствами, что упрощает отладку.
throw 'message' (Примитив)
try {
throw 'Произошла ошибка';
} catch (error) {
console.log(error); // "Произошла ошибка" (просто строка)
} Проблемы:
Нет стека вызовов (error.stack).
Нет стандартных свойств (name, message).
Сложнее анализировать в логах.
throw new Error('message') (Объект ошибки)
try {
throw new Error('Серьезная ошибка');
} catch (error) {
console.log(error.message); // "Серьезная ошибка"
console.log(error.stack); // Стек вызовов для отладки
} Преимущества:
Есть name (например, Error, TypeError).
Есть stack — можно увидеть, где произошла ошибка.
Можно создавать кастомные классы ошибок (class MyError extends Error).
Всегда лучше new Error(), если нужна отладка.
throw 'message' можно использовать для простых случаев, но это не рекомендуется.
Пример кастомной ошибки:
class ValidationError extends Error {
constructor(message) {
super(message);
this.name = 'ValidationError';
}
}
throw new ValidationError('Неверные данные');