# JavaScript的错误处理和调试

try catch处理异常能力有限,对于处理运行时非异步错误是没有问题的,但却无法处理语法错误和异步错误。

try {
    // 可能会导致错误的代码
} catch(error) {
    // 在错误发生时怎么处理
    alert(error.message)
} finally {
    return 0
}
1
2
3
4
5
6
7
8

如果try块中的任何代码发生错误,就会立即退出代码执行过程,然后接着执行catch块,此时catch块会接收到一个包含错误信息的对象。无论如何是直接执行完try语句还是跳出执行catch语句,finally语句都会执行。

# 错误类型

  • Error

基本类型,其他错误类型都继承该类型。该错误类型很少见,一般供开发人员自定义错误。

  • EvalError

使用eval()函数发生异常时被抛出。如果没有把eval()当成函数调用就会报该错误类型。

  • RangeError

数值超出相应范围时触发。

var items = new Array(-20) // 抛出RangeError
1
  • ReferenceError

在找不到对象的情况下。通常在访问不存在的变量时就会发生这种错误。

  • SyntaxError

当你在 JS 代码中使用任何错误的语法时,都会引发SyntaxError

  • TypeError

在变量保存着意外的类型时,或者在访问不存在的方法时都会发生该错误。

  • URIError

在使用encodeURI/decodeURIURI格式不正确就会发生该错误。

# 抛出错误

try-catch语句相配的还有一个throw操作符,用于随时抛出自定义错误。抛出错误时必须要给throw指定一个值。在遇到throw操作符时代码会立即停止执行,仅当有try...catch语句捕获到被抛出的值时,代码才会继续执行

# 认识window.onerror

window.onerror放在所有脚本之前,便能对语法异常和运行异常进行处理。对语法错误和网络错误无能为力,对异步和非异步错误都能捕获到运行时错误。