JS错误处理

当发生错误时,JS通常会停止并抛出异常(Error对象),该对象带有两个属性namemessage

try catch finally

即使程序发生错误,也不会中断执行。

  • try中出错时,try的后续代码不会执行,而是直接进入catch
  • finally可以省略
  • 使用try包裹的代码,即使不出错,效率也比不用try包裹的代码低
try{
    可能发生错误的代码
}catch(err){
    只有发生错误时才执行的代码
}finally{
    无论是否出错,肯定都要执行的代码
}
try catch finally 中的 return
  • try/catch/finally中执行return时,不但阻止其自身后续逻辑,还会阻止try catch finally后的代码继续执行
  • finally存在时,即使try/catch中存在returnfinally也依然会执行
  • trycatchfinally同时存在return,则finallyreturn生效

throw

throw语句允许主动抛出一个错误,通过与 trycatch 一同使用,就可以控制程序流并生成自定义错误消息。

异步的错误处理

try只能监听同步逻辑的执行,当异步抛出错误时,应在异步方法内另外使用错误处理。

同理,在Promise的函数体内,只有 同步方法出错 / 同步throw 才会进入onRejected逻辑,异步方法内只能通过调用reject进入onRejected

可以通过 await 把异步变成同步,来使try监听错误:

(async function () {
  try {
    await Promise.reject(100);
    console.log(200);
  } catch (error) {
    console.log("error", error);
  }
  console.log(300);
})();

输出结果:
error 100
300

onerror

抛出的错误都可以被window.onerror事件捕捉到

window.onerror = function (e) {
  console.log('window', e)
}
throw new Error("err")
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容