В чем разница между `throw new Error` и` throw someObject`?

, я хочу написать общий обработчик ошибок, который будет улавливать пользовательские ошибки, специально созданные в любом экземпляре кода.

Когда я выдал новую ошибку ('образец') , как в следующем коде

try {
    throw new Error({'hehe':'haha'});
    // throw new Error('hehe');
} catch(e) {
    alert(e);
    console.log(e);
}

Журнал отображается в Firefox как Ошибка: [объект Object] , и я не мог проанализировать объект.

Для второго броска журнал выглядит следующим образом: Ошибка: хе-хе

В то время как, когда я сделал

try {
    throw ({'hehe':'haha'});
} catch(e) {
    alert(e);
    console.log(e);
}

, консоль отображалась как: Объект {хе-хе = "хаха"} , в котором мне удалось получить доступ к свойствам ошибки.

В чем разница?

Видна ли разница в коде? Как строка будет просто передана как строка, а объект как объекты, но синтаксис будет другим?

Я не исследовал бросание объекта ошибки ... Я сделал только бросание строк.

Есть ли другой способ, кроме двух вышеупомянутых методов?

334
задан Sebastian Simon 2 September 2017 в 00:41
поделиться

1 ответ

Конструктор Error используется для создания объекта ошибки. Объекты ошибок выбрасываются при возникновении ошибок во время выполнения. Объект Error также может использоваться как базовый объект для определенных пользователем исключений.

Определяемые пользователем ошибки генерируются с помощью оператора throw. управление программой будет передано в первый блок catch в стеке вызовов.

Разница между выдачей ошибки с и без объекта Error:


throw {'hehe':'haha'};

В Chrome Devtools выглядит следующим образом:

enter image description here

Chrome говорит нам, что у нас есть необработанная ошибка, которая просто является объектом JS. Сам объект может иметь информацию об ошибке, но мы до сих пор не знаем, откуда она появилась. Не очень полезно, когда мы работаем над нашим кодом и отлаживаем его.


throw new Error({'hehe':'haha'}); 

В Chrome devtools выглядит следующим образом:

enter image description here

Ошибка, выдаваемая объектом Error, дает нам трассировка стека, когда мы его расширяем. Это дает нам ценную информацию, откуда именно произошла ошибка, которая часто является ценной информацией при отладке вашего кода. Также отметим, что ошибка говорит [object Object], это потому, что конструктор Error ожидает строку сообщения в качестве первого аргумента. Когда он получает объект, он приводит его в строку.

4
ответ дан 23 November 2019 в 00:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: