第16章 异常处理

151 阅读2分钟

一、Errow

JavaScript解析或执行时,一旦发生错误,引擎就会抛出一个错误对象。JavaScript 原生提供一个 Error 构造函数,所有抛出的错误都是这个构造函数的实例。Error 构造函数接受一个参数,表示错误提示,可以从实例的 message 属性读到这个参数。

let err = new Error("Validation fails!");
err.message // "Validation fails!"

二、原生错误类型

Eoor 对象是最一般的错误类型,在它的基础上,JavaScript还定义了其他6种错误,也就是说,存在Error的6个派生对象。

1、SyntaxError

SyntaxError 是解析代码时发生的语法错误。

let 1a = 10
// 'VM104:1 Uncaught SyntaxError: Unexpected number'

if(true) {
    console.log('Hi);
		// 'VM104:1 Uncaught SyntaxError: Invalid or unexpected token'
}

2、ReferenceError

ReferenceError 是引用一个不存在的变量时发生的错误。

let b = a;
// 'VM143:1 Uncaught ReferenceError: a is not defined(…)'

3、TypeError *

TypeError 是变量或参数不是预期类型时发生的错误。比如,对字符串、布尔值、数值等原始类型的值使用new命令,就会抛出这种错误,因为new命令的参数应该是一个构造函数。

let s = new 'Hi';
// 'VM424:1 Uncaught TypeError: "Hi" is not a constructor(…)'

let obj = {}; obj.test();
// 'VM493:2 Uncaught TypeError: obj.test is not a function(…)'

三、throw

throw 语句的作用是中断程序执行,抛出一个意外或错误。它接受一个表达式作为参数,可以抛出各种值。

throw err;
throw "异常提示信息";

通过 console.assert(condition, tips); 可以根据条件是否满足输出异常信息:

var age = 12;
console.assert(age > 18, "未满18岁!");

四、try…catch

如果要对错误进行处理,可以使用 try…catch 结构,try 代码块抛出一个错误,可以在 catch 中对该错误进行捕获,catch 接受一个参数,表示 try 代码块抛出的值。catch 代码块捕获错误之后,程序不会中断,会按照正常流程继续执行下去。

try {
	alertt("Hello, World!");
}catch(err) {
	// 捕捉异常
	let des = "错误警告:" + err.message;
	alert(des);
}

tips:try…catch 结构是JavaScript语言受到Java语言影响的一个明显的例子。这种结构多多少少是对结构化编程原则一种破坏,处理不当就会变成类似goto语句的效果,应该谨慎使用。

五、finally

try…catch 结构允许在最后添加一个 finally 代码块,表示不管是否出现错误,都必需在最后运行的语句。

try {
  
} catch(err) {

} finally {

}