写在前面:对于代码,处理非正常情况不可或缺,主要体现在错误和异常。在计算机系统的语义里,错误是非正常的系统级的严重错误,出现后程序直接终止,这种错误是不应该、或是不可预见的而异常是程序运行时不满足某些条件而出现的非严重的错误。虽有轻重。但在JS的语法里,它们实际上一个东西,都可以用 try-catch 来处理,因此不用在意它们的处理方式。唯一不同的是,只是在JS中异常可以以字符串、数字、布尔值或对象的形式来抛出处理,而错误则通常特指Error对象及其继承的自定义子对象。
try-catch的语法
try{
... //异常的抛出
}catch(e){
... //异常的捕获与处理
}finally{
... //结束处理
}
其中,try块包含的是可能产生异常的代码,在这里面直接或者在里面通过调用函数或间接用throw语句抛出的异常都可以捕获到。throw后面可以接字符串、数字、布尔值和对象。但值得注意的是:throw后的语句将不再执行,如果有多个throw只会执行第一个。
另外,部分浏览器根据自身的error对象的属性不同还有更多拓展的错误信息展示,如下。
Error具有下面一些主要属性:
description: 错误描述 (仅IE可用).
fileName: 出错的文件名 (仅Mozilla可用).
lineNumber: 出错的行数 (仅Mozilla可用).
message: 错误信息 (在IE下同description)
name: 错误类型.
number: 错误代码 (仅IE可用).
stack: 像Java中的Stack Trace一样的错误堆栈信息 (仅Mozilla可用).
而对于catch块,是处理异常的地方,包括条件捕获和非条件捕获。
条件捕获,如 catch(e instanceof obj) 的形式,用 instanceof 判断异常的对象类型,实现指定的异常处理方式。
非条件捕获,如 catch(e) 的形式,当异常抛出时,无论异常的类型都进行捕获并处理。
但值得注意的是,如果条件捕获和非条件捕获共用,那么非条件捕获必须放在最后,因为它是无条件的捕获类型,捕获后会忽略后面的任意 catch 块。
并且在处理完错误的之后,还可以写一些在错误发生之后的其他代码以让整个程序继续进行。
最后,finally块是无论try-catch里发生什么,都会被忽略而执行其中的代码。
写在最后:我们可以自己通过Error对象写一些错误信息,然后通过throw抛出,然后通过catch去捕获。
try {
throw new Error("myError!");
} catch (e) {
console.log(e.name + ": " + e.message); //Error: myError!
}
网友评论