哪些浏览器支持条件捕获子句?
在MDN try...catch上,您可以找到Conditional catch clauses作为非标准功能。
try {
myroutine(); // may throw three exceptions
} catch (e if e instanceof TypeError) {
// statements to handle TypeError exceptions
} catch (e if e instanceof RangeError) {
// statements to handle RangeError exceptions
} catch (e if e instanceof EvalError) {
// statements to handle EvalError exceptions
} catch (e) {
// statements to handle any unspecified exceptions
logMyErrors(e); // pass exception object to error handler
}
注意:此功能不是ECMAScript规范的一部分。
它受到任何现代浏览器的支持吗?
Google Chrome的控制台返回Uncaught SyntaxError: Unexpected token if
或者我使用:
try {
myroutine(); // may throw three exceptions
} catch (e) {
if(e instanceof TypeError) {
// statements to handle TypeError exceptions
}
else if(e instanceof RangeError) {
// statements to handle RangeError exceptions
}
else if(e instanceof EvalError) {
// statements to handle EvalError exceptions
}
else {
// statements to handle any unspecified exceptions
logMyErrors(e); // pass exception object to error handler
}
}
答案 0 :(得分:5)
你应该使用后者,因为它适用于所有地方,引用MDN
以下是如何实现相同的“条件捕获子句” 仅使用符合ECMAScript的简单JavaScript 规范(显然它更冗长,但无处不在(我在Firefox,IE和Chrome上测试过)),我有:
try {
myroutine(); // may throw three types of exceptions
} catch (e) {
if (e instanceof TypeError) {
// statements to handle TypeError exceptions
} else if (e instanceof RangeError) {
// statements to handle RangeError exceptions
} else if (e instanceof EvalError) {
// statements to handle EvalError exceptions
} else {
// statements to handle any unspecified exceptions
logMyErrors(e); // pass exception object to error handler
}
}
第一个catch (e if e instanceof ..)
仅适用于Mozilla Firefox,而会在Chrome和IE上显示错误
<强>铬强>
Uncaught SyntaxError: Unexpected token if
<强> IE 强>
SCRIPT1006: Expected ')'
答案 1 :(得分:3)
在MDN上尝试...捕获您可以找到条件捕获子句作为非标准功能。
注意:此功能不是ECMAScript规范的一部分。
这意味着这不是所有浏览器和东西都同意的javascript语言的一部分。这肯定意味着并非所有浏览器都支持如果有的话。关于跨浏览器解决方案的最佳选择是使用switch子句的第二种情况。 GL
答案 2 :(得分:2)
只有moz支持它。每个人都希望每个浏览器都支持它。这实际上意味着你根本无法使用它。
答案 3 :(得分:2)
您在问题中提到的链接明确指出非标准。
这个代码是实验性的,而不是 ECMA规范的一部分。
这只适用于Moz,因为这是他们的想法,但仍未完全实现。
为了成为ECMA规范的一部分,它需要很多步骤。
第一个Moz构建它然后提出它然后才会被接受。
直到那一刻,你不能在所有网站上使用它。