未被捕获的异常
在程序中,往往会出现异常。虽然主动捕获这些异常是保证程序健壮的必要做法,但是难免会漏掉一些。
对于未被捕获的异常,浏览器会在控制台显示一条错误信息,该信息包含异常信息和其在代码中出现的位置。
window.onerror
Window对象有一个onerror属性,将其指定为一个函数,可以处理未被捕获的异常。
在未被捕获的异常沿着调用栈一路向上传播,错误信息即将显示到控制台时,该函数会被调用。
它被传入多个参数:
- message: 描述异常的信息
- url: 导致异常的JavaScript代码的URL
- line: 文档中发生异常的代码的行数
- column: 文档中发生异常的代码的列数
- error: 异常对象本身
未被处理的Promise reject
若Promise对象调用了reject,但未使用catch方法处理的情况与为被捕获的异常十分类似,浏览器会在控制台抛出被拒绝的Promise对象与拒绝理由。
window.onunhandlerejection 与 unhandledrejection 事件
通过为Window对象指定onunhandlerejection属性或注册unhandledrejection事件监听器,来处理没有reject处理器的Promise对象。
该事件处理器函数接受的Event对象参数有两个有用的属性:
- promise: 指向未被处理的Promise对象
- reason: 拒绝Peomise的原因