有没有像;一网打尽'JavaScript错误处理程序

Is there such a thing as a 'catch all' JavaScript error handler?

本文关键字:错误 处理 JavaScript 程序 一网打尽 有没有      更新时间:2023-09-26

我发现使用异步回调,我需要为每个回调函数编写一个try/catch。这似乎有点容易出错。有没有一种方法或技术可以让我实现一个顶级的try/catch来捕获所有内容?如果不是,我使用的技术是否被认为是良好的实践,或者有更好的方法吗?

有两种方法:

  1. 设置窗口的onerror属性
    • 使用三个参数(message、url、lineNumber)调用
    • 返回true(!)将阻止默认的错误处理(使其类似于catch-all)
  2. window添加error事件侦听器
    • 以错误事件e作为其唯一参数调用
    • 调用e.preventDefault()阻止默认错误处理

如果不是,我使用的技术是否被认为是良好的实践,或者有更好的方法吗?

由于JavaScript的动态特性,try/catch的速度非常慢。几乎总是有更好的方法,例如:在调用某个方法之前检查它是否存在

// bad
try {
    document.getElementById('foo').focus();
} catch(e) {
    alert('foo not found');
}
//good
var el = document.getElementById('foo');
if (el) {
    el.focus();
} else {
    alert('foo not found');
}

对于您的具体情况,请出示您的一些代码;也许在另一个问题中。

不,不要一网打尽,这几乎总是会导致问题(因为你不能很好地区分异常)。

依赖全局捕获可能不是一个好主意,但拥有全局捕获也不是一个坏主意(在错误发生在您可能意想不到的地方的情况下)。通过这种方式,您可以按照自己的意愿处理未捕获的错误。

使用jQuery:

$(window).error(function (msg, url, line) {
     //do something
});