JavaScript 同样的内置了 try catch
这套现代的 异常处理机制
,很方便我们在编程中,提前对那些有可能遇见到的错误进行处理。
try { // 尝试执行
b = a + 1
} catch (e) { // 出现错误,对错误进行捕获
console.log('当前错误信息:' + e.message)
}
try catch
语法的补充。
try {
} catch (e) {
} finally {
console.log(1) // 无论 try 成功还是失败,finally 都会被执行
}
通过 catch
捕获到的错误,是有多种类型的,每种类型描述了相应的错误问题。
try {
b = a + 1
} catch (e) {
console.log(e instanceof Error) // true
console.log(e instanceof ReferenceError) // true | 引用错误
console.log(e instanceof SyntaxError) // false | 语法错误
}
/*
所有错误类型都是 Error 的派生类
Error
+-- SyntaxError
+-- ReferenceError
+-- RangeError
+-- TypeError
+-- URIError
+-- EvalError
*/
我们也能自定义错误,然后让解释器报错。
try {
throw new TypeError('1') // 抛出一个类型错误
} catch (e) {
console.log(e) // 捕获 | TypeError: 1
}
catch
没办法捕获到异步执行抛出的错误。
try {
setTimeout(() => {
throw new Error('1')
}, 1000)
} catch (e) {
// 无法捕获 new Error('1')
}