2017-09-18 37 views
0

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/try...catch#Conditional_catch_clauses为什么Mozilla创建条件catch子句?

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

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

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

与其依靠异地内容和让人离开现场去帮助你,不如在**你的问题中总结链接**的内容。 –

+1

*“在什么条件下”*是什么意思? –

回答

0

他们创造它是因为他们觉得它需要在语言中。他们可以这样做,因为他们控制SpiderMonkey(从技术上说,它是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得到它错误,但这将不会成为一个问题有一天)。