为什么Mozilla创建了条件捕获子句?

时间:2017-09-18 11:53:30

标签: javascript exception-handling mozilla

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/try...catch#Conditional_catch_clauses

所以这个问题仅仅是为了好奇......为什么(以及在什么条件下)Mozilla创建了这个不标准的结构?这个功能应该解决的问题是什么?

为什么不创造类似的东西并在引擎盖下检查原型?

try {}
catch(TypeError e) {}
catch(RangeError e) {}
catch(e) {}

1 个答案:

答案 0 :(得分:0)

他们之所以创造它,是因为他们认为需要使用该语言。他们可以这样做,因为他们控制SpiderMonkey(从技术上讲,JavaScript [SpiderMonkey实现的Mozilla语言]与ECMAScript [我们称之为“JavaScript”的标准化语言]不同)。他们将if设置为具有任意条件而不是更像Java的东西,因为如果你可以测试任何东西,而不仅仅是instanceof或类似的东西,它会更灵活。

目前还没有建议将其添加到 JavaScript ECMAScript中,也没有单独seem to be much appetite for doing so。 (一些对广义pattern matching感兴趣,目前是Stage 0提案,可能演变成也适用于catch的内容。)

但是在内部使用逻辑 catch块并且重新投掷变得更具吸引力,因为已达成一些共识以使调用堆栈生成发生在异常创建时间而不是throw(遗憾的是IE11错了,但这有一天会停止成为问题。)