我想编写一个通用错误处理程序,它将捕获在任何代码实例中故意抛出的自定义错误。
当我在下面的代码中 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"}
我可以在其中访问错误属性。
有什么区别?
是代码中看到的差异吗?像字符串一样将作为字符串和对象作为对象传递,但语法会有所不同吗?
我还没有探索过抛出错误对象……我只做了抛出字符串。
除了上面提到的两种方法,还有其他方法吗?
原文由 Jayapal Chandran 发布,翻译遵循 CC BY-SA 4.0 许可协议
javascript中’throw new Error’和’throw someObject’之间的区别在于throw new Error以以下格式包装传递给它的错误 -
throw someObject 将按原样抛出对象,并且不允许从 try 块执行任何进一步的代码,即与 throw new Error 相同。
这是关于 The Error 对象和抛出你自己的错误的 一个很好的解释
错误对象
如果发生错误,我们可以从中提取什么?所有浏览器中的 Error 对象都支持以下两个属性:
name:错误的名称,或者更具体地说,错误所属的构造函数的名称。
message:错误的描述,此描述因浏览器而异。
name 属性可以返回六个可能的值,如前所述,它们对应于错误构造函数的名称。他们是:
抛出你自己的错误(例外)
在控制自动从 try 块转移到 catch 块之前,无需等待 6 种类型的错误之一发生,您还可以显式抛出您自己的异常以强制其按需发生。这对于创建自己的错误定义以及何时应将控制权转移到 catch 非常有用。