6

我正在考虑使用window.onerrorvs.try{...} catch(e){...}块处理 JavaScript 运行时错误。

https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers.onerror状态:

请注意,一些/许多错误事件不会触发 window.onerror,您必须专门监听它们。

似乎两者都window.onerror可以try{...} catch(e){...}处理 ReferenceError:http: //jsfiddle.net/7RARf/

此外,两者都无法处理 SyntaxError:http: //jsfiddle.net/UXVs2/

除了使用处理错误window.onerrortry{...} catch(e){...}使用 like 处理错误之间存在明显差异之外,try-catch 允许我们优雅地处理错误、重新抛出错误等,而 window.onerror 函数则没有,等等。两者之间存在哪些其他差异处理错误的方法?是否有任何可以处理window.onerror但不能处理的错误try{...} catch(e){...}?反之亦然?

4

2 回答 2

1

是的 - window.onerror 可以检测由浏览器工作流引起的错误 - try/catch 仅对执行的 js 代码的有限部分进行操作。window.onerror 可能会检测到插件问题或由不严格的代码引起的任何错误(jQ 等库、YT API 等 API 等) - 例如:您不能将外部库支持的异步代码放入 try 中(无需修改外部代码) ,您不能将由 html 标签完成的脚本加载放入 try (它由浏览器管理) - window.onerror 将在脚本文件损坏且无法加载到标签时触发 - window.onerror 引发的错误比 catch 更多能够支持 - 它还包含有关文件和行的信息。缺点是 window.onerror 只提供信息 - 代码被中断,

您可以使用 try/catch 来捕获语法错误,但前提是您正在评估代码形式的字符串:

try{
  eval('(function(){asdhaowd;;;;asd;!!!@#!@$lolzolololol]]]]]]]})()');
} catch(e){
  do sth();
}

它会捕获 eval 错误(意外的 ']' 或之前的东西) 我在我的网站上使用它来检测用户上传的损坏代码。window.onerror 仅对调试有用 - 它不能防止代码崩溃,当尝试可以时

于 2013-10-02T20:38:15.997 回答
0

window.onerror 就像一个全局的 try/catch 块。使用 try/catch 来定位您知道可能会出错的特定块。

window.onerror 是一般情况。我注意到的一件事是,您分配给 window.onerror 以处理错误的函数应该在调用它的代码之上定义,否则您可能会收到函数未定义错误。

于 2019-02-04T13:09:26.643 回答