条件catch子句 - 浏览器支持

时间:2013-12-10 00:17:28

标签: javascript exception

哪些浏览器支持条件捕获子句

在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
    }
}

4 个答案:

答案 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构建它然后提出它然后才会被接受。

直到那一刻,你不能在所有网站上使用它。