错误与异常是什么

错误,指程序中的非正常运行状态,在其它编程语言中称为“异常”或“错误”。解释器会为每个错误情形创建并抛出一个Error对象,其中包含错误的描述信息。

通过使用Javascript提供的异常处理语句,可以用结构化的方式来捕捉发生的错误,让异常处理代码与核心业务代码实现分离。

错误与异常处理在应用中的重要性是毋庸置疑的。任何有影响力的Web应用都需要一套完善的错误处理机制。

try…catch语句

try表示标记一块待尝试的语句,如果语句出现错误,则通过catch语句进行捕捉。

1
2
3
4
5
6
7
8
9
10
11
// 用于捕获指定语句块中的错误或异常
try {
console.log(v); //调用未定义的变量 -> 报错
} catch (error) {
// 用于处理try语句中的错误
// error 表示try语句中出现错误的信息
console.log("改变量未定义");
} finally {
// catch语句无法处理try语句中的错误或异常时,执行finally语句中的内容
console.log("");
}

finally表示最后执行,无论是走try还是catch都会执行finally语句。

throw语句

人为抛出错误或异常,语法结构throw 异常或错误的表达式。其表达式允许是任意类型的内容。作用为预判断当前使用的变量、函数或对象是否存在。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
function fn(v) {
if (v) {
return v;
} else {
/**
* throw 语句 - 人为抛出错误或异常
* 语法结构
* - throw 异常或错误的表达式
* 表达式允许是任意类型的内容
* 作用 - 预判断当前使用的变量、函数或对象是否存在
*/
// 真是情况下应抛出一个错误对象
throw "undefined";
}
}
// console.log(fn(10));
// console.log(fn());

var result;
try {
result = fn();
} catch (e) {
result = "unkown";
console.log(e); // undefined
}

console.log(result); // unkown

嵌套try…catch语句

可以嵌套一个或多个try…catch语句。如果一个内部的try…catch语句没有捕捉块,将会启动匹配外部的try…catch语句的捕捉块。

注意:嵌套在catch语句块内。

1
2
3
4
5
6
7
8
9
try {
console.log(0);
} catch (e) {
try {
console.log(1);
} catch (e) {
console.log(2);
}
}

错误类型

基本错误类型

执行代码期间可能会发生的错误有多种类型,每种错误都有对应的错误类型。当错误发生时,就会抛出对应类型的错误对象。

Error是基本错误类型,其他错误类型都继承自该类型。Error类型的错误很少见,如果有也是浏览器抛出的。这个基本错误类型的主要目的是提供给开发人员抛出自定义错误的。

预定义错误类型

错误类型说明
EvaError表示错误的原因:与eval()有关。
internalError表示JavaScript引擎内部错误的异常。
RangeError表示错误的原因:数值变量或参数超出其有效范围。
ReferenceError表示错误的原因:无效引用。
SyntaxError表示错误的原因:eval()在解析代码的过程中发生的语法错误。
TypeError表示错误的原因:变量或参数不属于有效类型。
URIError表示错误的原因:给encodeURI()decodeURI()传递的参数无效。

JavaScript 错误参考