原文地址:https://wangdoc.com/javascript/
Error实例对象
JavaScript解析或运行时,一旦发生错误,引擎就会抛出一个错误对象。JavaScript原生提供Error构造函数,所有抛出的错误都是这个构造函数的实例。
var err = new Error("Error message");
err.message // "Error message"
Error构造函数接受一个参数,表示错误信息。通过实例的message属性来获取。JavaScript语言标准只提到,Error实例对象必须有message属性,没有提到其他属性。大多数JavaScript引擎对Error实例还提供了name和stack属性,分别表示错误的名称和错误的堆栈,但它们是非标准的。
- message:错误提示信息
- name:错误名称(非标准)
- stack:错误的堆栈(非标准)
原生错误类型
Error实例对象是最一般的错误类型,在它的基础上,JavaScript还定义了其他6种错误对象。也就是说,存在Error的6个派生对象。
SyntaxError对象
SyntaxError对象时解析代码时发生的语法错误。
ReferenceError对象
ReferenceError对象是引用一个不存在的变量时发生的错误。将一个值分配给无法分配的对象,比如对函数运行结果或者this赋值。
RangeError对象
RangeError对象是一个值超出有效范围发生的错误。主要有几种情况,一是数组长度为负数,二是Number对象的方法参数超出范围,以及函数堆栈超过最大值。
TypeError对象
TypeError对象是变量或参数不是预期类型时发生的错误。比如对字符串、布尔值、数值等原始类型的值使用new命令,因为new命令的参数应该是一个构造函数,或者调用某个对象不存在的方法,也会抛出TypeError错误。
URIError
URIError对象是URI相关函数的参数不正确时抛出的错误,主要涉及encodeURI()、decodeURI()、encodeURIComponent()、decodeURIComponent()、escape()和unescape()这六个函数。
EvalError对象
eval函数没有正确执行时,会抛出EvalError错误,该错误类型已经不再使用,为了兼容旧代码而保留。
自定义错误
JavaScript除了提供原生的七种错误对象外,还可以定义自己的错误对象。
function CustomError(message) {
this.message = message || "Default error";
this.name = "CustomError";
}
CustomError.prototype = new Error();
CustomError.prototype.constructor = CustomError
上面代码自定义了一个错误对象CustomError,它继承Error对象。然后,就可以生成这种自定义类型的错误了。
throw语句
throw语句作用是手动中断程序执行,抛出一个错误。
实际上,throw可以抛出任何类型的值。也就是说,它的参数可以是任何值。
throw "Error";
throw 42;
throw {};
try...catch结构
一旦发生了错误,程序就中止执行。JavaScript提供了try...catch结构,允许对错误进行处理,选择是否往下执行。
为了捕捉不同类型的错误,catch代码块中可以加入判断语句。
try {
// ...
} catch (e) {
if (e instanceof EvalError) {
// ...
} else if (e instanceof RangeError) {
// ...
}
// ...
}
## finally代码块
<font color=red>try...catch</font>结构允许在最后添加一个<font color=red>finally</font>代码块,表示不管是否出现错误,都必须在最后运行的语句。