抛出错误的目的不是防止错误,而是在错误发生的时能更加容易地调试。
try-catch语句
Javascript提供了try-catch语句,它能在浏览器处理抛出的错误之前来解析它。
可能引发错误的代码放在try块中,处理错误的代码放在catch块中。如:
try {
somethingThatMighCauseAnError();
} catch (ex) {
handleError(ex);
}
当在try块中发生了一个错误时,程序立刻停止执行,然后跳到catch块,并传入一个错误对象。
检查该对象可以确定从错误中恢复的最佳动作。
当然,还可以增加一个finally块。finally块中的代码不管是否有错误发生,最后都会被执行。如:
try {
somethingThatMighCauseAnError();
} catch (ex) {
handleError(ex);
} finally {
continueDoingOtherStuff();
}
在某些情况下,finally块工作起来有点复杂。例如,如果在try块中包含了一个return语句,实际上它必须等到finally块中的代码执行后才能返回。由于这个原因,finally其实不常用,但如果处理错误必要,它仍然是处理错误的一个强大的工具。
*注:千万不要将try-catch中的catch块留空,你应该总是写点什么来处理错误。不要像下面这样做:
try {
somethingThatMighCauseAnError();
} catch (ex) {
// 空
}
如果知道可能要发生错误,那肯定知道如何从错误中恢复。所以你应该是实实在在地在处理错误,而不是忽略它。
错误类型
所有错误的基本类型,就是Error错误,实际上引擎从来不会抛出该类型的错误。
ECMA-262规范指出了7中错误类型:Error , EvalError , RangeError , ReferenceError, SyntaxError,SyntaxError, TypeError, URIError。
文章内容从《编写可维护的Javascript》[美] Nicholas C. Zakas著 一书中总结写出。