错误处理
基础语法
创建异常类
// 创建一个错误类
const err = new Error("erroeCode")
// or
const err = Error('xxx')
常用错误类型
错误名称 | 说明 | 触发场景 |
---|---|---|
EvalError | 错误。 | eval() 函数调用发生错误时,会抛出 EvalError。 |
InternalError | 内部错误 | 在 JavaScript 运行时引擎发生异常时使用。它表示代码可能存在问题也可能不存在问题。 |
RangeError | 范围错误 | 当变量设置的值超出其合法值范围时,将抛出 RangeError。 |
ReferenceError | 引用错误 | 当代码中的变量引用有问题时,会发生 ReferenceError。 |
SyntaxError | 语法错误 | |
TypeError | 类型错误 | 当某些值不是特定的预期类型时 |
URIError | URI错误 | 当 URI 的编码和解码出现问题时,会抛出 URIError。JavaScript 中的 URI 操作函数包括:decodeURI 、decodeURIComponent 等。如果使用了错误的参数(无效字符),就会抛出 URIError。 |
自定义错误类型
class ValidationError extends Error {
constructor(message) {
super(message);
this.name = "ValidationError";
}
}
错误判断
通过instanceof
来判断错误类型
try {
If (typeof x !== ‘number’) {
throw new TypeError(‘x 应是数字’);
} else if (x <= 0) {
throw new RangeError('x 应大于 0');
} else {
// ...
}
} catch (err) {
if (err instanceof TypeError) {
// 处理 TypeError 错误
} else if (err instanceof RangeError) {
// 处理 RangeError 错误
} else {
// 处理其他类型错误
}
}
Error实例
Error 对象有三个属性:
message
:带有错误消息的字符串;name
: 错误的类型;stack
:函数执行的堆栈跟踪。
const err = new Error("erroeCode")
// 使用
err.message
err.stack
err.name
异常捕获
- async & await
async function (){
try{
await ...
}catch{
}
}
- await 配合promise
async function (){
await Promise().then().catch(e=>handler)
}