Try - Catch - Finally

在Javascript中,我们常使用try、catch以及finally语句组合来处理错误。

try...catch?


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 来执行。


4. 附录

try catch 对代码运行的性能影响
http://web.jobbole.com/84026/