一、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 {
}