所以这个问题仅仅是为了好奇......为什么(以及在什么条件下)Mozilla创建了这个不标准的结构?这个功能应该解决的问题是什么?
为什么不创造类似的东西并在引擎盖下检查原型?
try {}
catch(TypeError e) {}
catch(RangeError e) {}
catch(e) {}
答案 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错了,但这有一天会停止成为问题。)