我仍然是相对较新的JavaScript,来自更经典的(即Java,也是ActionScript 3.0)背景。我发现不正确的库/框架API实现通常会在调用堆栈中进一步破坏,而没有明确指出它的应用程序代码(而不是库代码)会破坏事物。
例如,jQuery.trigger()调用可能会调用抛出错误的处理程序,并且该调用未包含在try-catch中(也未实现任何其他类型的错误保护),并阻止所有其他处理程序烧成。
我理解错误应该停止执行,但似乎库代码可以更好地从应用程序代码沙箱化,我在JS库中看到这种破坏比在其他语言中更频繁已经合作过。
答案 0 :(得分:4)
首先,因为抓住一个例外很痛苦:
try {
doSomething();
} catch(e) {
if (e instanceof SomeException) {
// handle SomeException
} else {
throw e; // and lose stacktrace information :-(
}
}
并且捕获所有异常通常是错误的。
其次,因为JavaScript本身的异常层次结构在区分不同类型的错误和提供有关它们的信息属性方面非常差。 JavaScript倾向于做一些你可能意味着什么,并且当它不是时就会悄然破坏,而不是引发错误(参见undefined
等)。它在历史上也在浏览器之间不一致(特别是DOM异常)。这意味着没有使用异常的文化,并继承到库设计。
答案 1 :(得分:1)
什么bobince说,但是,即使在你的函数中提到try-catch
,目前也没有任何意义,因为该函数将被优化。请参阅here,注意JSPerf并不意味着显示幅度,优化和未优化代码之间的差异可能高达1000倍(或其他)。您可以在测试中添加更多代码,您应该看到相对差异越来越大。
这与例如完全不同。只提及try-catch的Java在性能方面根本不会对任何事情产生任何影响,实际发生的是你支付的异常(然后无关紧要)