1. 错误的类型

1.1 Error: 所有错误的父类型

  1. **ReferenceError**: 引用的变量不存在<br /> **TypeError**: 数据类型不正确的错误<br /> **RangeError**: 数据值不在其所允许的范围内<br /> **SyntaxError**: 语法错误

1.2 ReferenceError: 引用的变量不存在

  1. // 1). ReferenceError: 引用的变量不存在
  2. // console.log(a) // ReferenceError: a is not defined
  3. // console.log('-----') // 没有捕获error, 下面的代码不会执行

1.3 TypeError: 数据类型不正确的错误

  1. // TypeError: 数据类型不正确的错误
  2. // let b
  3. // // console.log(b.xxx) // TypeError: Cannot read property 'xxx' of undefined
  4. // b = {}
  5. // b.xxx() // TypeError: b.xxx is not a function

1.4 RangeError: 数据值不在其所允许的范围内

  1. // RangeError: 数据值不在其所允许的范围内
  2. // function fn() {
  3. // fn()
  4. // }
  5. // fn() // RangeError: Maximum call stack size exceeded

1.5 SyntaxError: 语法错误

  1. // SyntaxError: 语法错误
  2. // const c = """" // SyntaxError: Unexpected string

2. 错误处理

  1. 捕获错误: try ... catch<br /> 抛出错误: throw error
  1. // 捕获错误: try ... catch
  2. // try {
  3. // let d
  4. // console.log(d.xxx)
  5. // } catch (error) {
  6. // console.log(error.message)
  7. // console.log(error.stack)
  8. // }
  9. // console.log('出错之后')
  1. // 抛出错误: throw error
  2. function something() {
  3. if (Date.now()%2===1) {
  4. console.log('当前时间为奇数, 可以执行任务')
  5. } else { // 如果时间是偶数抛出异常, 由调用来处理
  6. throw new Error('当前时间为偶数无法执行任务')
  7. }
  8. }
  9. // 捕获处理异常
  10. try {
  11. something()
  12. } catch (error) {
  13. alert(error.message)
  14. }

3. 错误对象

  1. message属性: 错误相关信息<br /> stack属性: 函数调用栈记录信息