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