我想编写一个常见的错误处理程序,该处理程序将在代码的任何情况下都会捕获自定义错误。

当我这样做的时候throw new Error('sample')如以下代码

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

在Firefox中显示的日志Error: [object Object]我无法解析对象。

第二个throw日志显示为:Error: hehe

何时我

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

控制台显示为:Object { hehe="haha"}在其中我能够访问错误属性。

What is the difference?

差异是否如代码中看到吗?像字符串一样,将作为字符串和对象作为对象传递,但是语法会不同吗?

我还没有探索投掷错误对象……我只扔了字符串。

除了上述两种方法,还有其他方法吗?

答案

JavaScript中"投掷新错误"和"投掷某些对象"之间的区别在于,投掷新错误包裹了以下格式传递给它的错误 -

{名称:‘错误’,消息:‘字符串在构造函数中传递’}

投掷某些对象将按原样抛出对象,并且不允许从TRY块中执行任何进一步的代码,即与抛出新错误相同。

这是一个很好的解释错误对象并丢弃自己的错误

The Error Object

在发生错误的情况下,我们可以从中提取什么?所有浏览器中的错误对象都支持以下两个属性:

  • 名称:错误的名称,或更具体地说,是错误属于的构造函数函数的名称。

  • 消息:错误的描述,此描述根据浏览器而变化。

可以通过名称属性返回六个可能的值,如所述,该属性与错误的构造函数的名称相对应。他们是:

Error Name          Description

EvalError           An error in the eval() function has occurred.

RangeError          Out of range number value has occurred.

ReferenceError      An illegal reference has occurred.

SyntaxError         A syntax error within code inside the eval() function has occurred.
                    All other syntax errors are not caught by try/catch/finally, and will
                    trigger the default browser error message associated with the error. 
                    To catch actual syntax errors, you may use the onerror event.

TypeError           An error in the expected variable type has occurred.

URIError            An error when encoding or decoding the URI has occurred 
                   (ie: when calling encodeURI()).

Throwing your own errors (exceptions)

您还可以明确地提出自己的异常,以强迫按需发生这种情况。这非常适合创建自己的定义,即错误是什么,以及何时应该传输控制以捕获。

来自: stackoverflow.com