一、Error对象
二、JS的原生错误类型
Error
对象是最一般的错误类型,在它的基础上,JS还定义了其他6种错误,也就是说,存在Error
的6个派生对象。
2.1、SyntaxError
SyntaxError
是解析代码时发生的语法错误。
//变量名错误
var 1;
2.2、ReferenceError
ReferenceError
是一个引用一个不存在的变量时发生的错误。
2.3、RangeError
RangeError
是当一个值超出有效范围时发生的错误。主要有几种情况,一是数组长度为负数,二是Number
对象的方法参数超出范围,以及函数堆栈超过最大值。
2.4、TypeError
TypeError
是变量或参数不是预期类型时发生的错误。比如,对字符串、布尔值、数值等原始类型的值使用new
命令,就会抛出这种错误,因为new
命令的参数应该是一个构造函数。
2.5、URIError
URIError
是URI
相关函数的参数不正确时抛出的错误。
2.6、EvalError
eval
函数没有被正确执行时,会抛出EvalError
错误。该错误类型已经不再在ES5中出现了,只是为了保证与以前代码兼容,才继续保留。
三、自定义错误
四、throw语句
throw
语句的作用是中断程序执行,抛出一个意外或错误。它接受一个表达式作为参数,可以抛出各种值。
// 抛出一个字符串
throw "Error!";
// 抛出一个数值
throw 42;
// 抛出一个布尔值
throw true;
// 抛出一个对象
throw {toString: function() { return "Error!"; } };
上面代码表示,throw
可以接受各种值作为参数。JavaScript引擎一旦遇到throw
语句,就会停止执行后面的语句,并将throw
语句的参数值,返回给用户。
五、try...catch结构
为了对错误进行处理,需要使用try...catch
结构。
try{
throw new Error('出错了!');
} catch(e){
console.log(e.name+':'+e.message);
}
//Error: 出错了!
上面代码块中,try
代码块一抛出错误,JS引擎就立即把代码的执行,转到catch
代码块。
catch
代码块捕获错误之后,程序不会中断,会按照正常流程继续执行下去。
try {
throw "出错了";
} catch (e) {
console.log(111);
}
console.log(222);
// 111
// 222
六、finally代码块
try...catch
结构允许在最后添加一个finally
代码块,表示不管是否出现错误,都必需在最后运行的语句。
(本系列下一节为 — JS编程风格)