JS 中的 error 处理
1: 错误类型:
-
Error:
所有错误的父类型-
ReferenceError:
引用的变量不存在 -
TypeError:
数据类型不正确的错误 -
RangeError:
数据值不再其允许范围之内 -
SyntaxError:
语法错误
-
常见内置类型
-
ReferenceError:
引用的变量不存在
console.log(a)
// 在 a 未被声明情况下 会报以下错误:
Uncaught ReferenceError: a is not defined
Uncaught: 未被处理 (没有被try catch)程序到这里不会被继续执行
ReferenceError: 错误类型,引用的变量不存在
"a is not defined" : 是错误信息 error message
-
TypeError:
数据类型不正确的错误
let b = null
console.log(b.x)
// 报错信息
Uncaught TypeError: Cannot read property 'x' of null
TypeError: 数据类型不正确的错误
"Cannot read property 'x' of null" : 不能在null 上获取x属性
-
RangeError:
数据值不再其允许范围之内
// 比如一个递归
function fn () {
fn()
}
fn()
// 执行会报错
Uncaught RangeError: Maximum call stack size exceeded
RangeError: 数据值不再其允许范围之内
-
SyntaxError:
语法错误
const a = """
// 执行会报错
SyntaxError: Invalid or unexpected token
SyntaxError:语法错误
2: 错误处理
- 捕获错误:
try ... catch..
try {
let d
console.log(d.xxx)
} catch (error) {
console.log(error)
console.log(error.message)
console.log(error.stack)
}
console.log('因为错误被捕获所以程序可以继续执行')
// 执行后会打印字符串 text
TypeError: Cannot read property 'xxx' of undefined
at <anonymous>:3:15
VM11511:6 Cannot read property 'xxx' of undefined
VM11511:7 TypeError: Cannot read property 'xxx' of undefined
at <anonymous>:3:15
因为错误被捕获所以程序可以继续执行
- 抛出错误:
throw error
function action (v) {
if (v) {
console.log('运行正常')
} else {
throw new Error('运行报错,抛出异常')
}
}
try{
action(false)
}catch (e) {
alert(e.message)
}
// 运行程序
Uncaught Error: 运行报错,抛出异常
3: 错误对象
message
属性:错误相关信息
stack
属性:函数调用栈记录信息