在Javascript中,我们常使用try、catch以及finally语句组合来处理错误。
1. 何时使用
在没有声明某个函数而直接调用,那么控制台就会报错,报错之后js就不执行后面的程序,这样对运行结果造成一定影响。这个时候就需要用的try…catch语句。
try{
fn(); //不确定是否存在的代码
} catch (e){
//do something 如果出现错误程序做一些操作
alert( e.name +":" + e.message)
} finally{
alert("Finally!"); //不管是否有错误信息都会执行
}
如上例所示,
alert展示的内容是 “ReferenceError:fn is not defined”,而在不同浏览器里显示的内容不大一样,但总之,是向我们传递了两个参数:
e.name —— Error对象的构造器名称;
e.message —— 由于Error对象在各宿主环境,即浏览器中表现的并不一致,因此有时候需要一些技巧使得这些提示统一,具体请参考附录地址。
2.throw用法
我们可以在try语句中抛出我们想要的错误对象内容,例如:
try{
throw new Error("fn is not defined!!!")
} catch(e){
alert( e.name +":" + e.message);
}
>>> Error: fn is not defined!!!
第二种写法:
try{
throw {
name: "myError",
message: "OMG!"
}
} catch(e){
alert( e.name +":" + e.message);
}
>>> myError:OMG!
3.try…Catch 弊端
代码执行耗时长。因此需要注意的性能消耗在于 try catch 中不要直接塞进去太多的代码(声明太多的变量),最好是吧所有要执行的代码放在另一个 function 中,通过调用这个 function 来执行。