Условные предложения catch - поддержка браузеров

Какие браузеры поддерживают Условия условного catch?

В MDN try...catch вы можете найти предложения условного catch как нестандартная функция.

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

Или shoud я использую:

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

Ответ 1

Вы должны использовать более поздний, поскольку он работает повсюду, цитируя MDN

И вот как реализовать те же "условные предложения catch", используя только простой JavaScript, соответствующий ECMAScript спецификация (, очевидно, она более многословна, но работает повсюду (я тестировал на 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

Chrome

Uncaught SyntaxError: Unexpected token if

IE

SCRIPT1006: Expected ')'

Ответ 2

В MDN try... catch вы можете найти условные блокировки catch как нестандартную функцию.

Примечание. Эта функциональность не является частью спецификации ECMAScript.

Это означает, что это не является частью языка javascript, который все браузеры и прочее согласились с тем, что они доступны. Что, безусловно, будет означать, что не все браузеры будут поддерживать его , если есть. Лучшим вариантом для кросс-браузерного решения будет второй случай с использованием предложения switch. GL

Ответ 3

Только moz поддерживает его. Все хотят, чтобы каждый браузер поддерживал его. Это фактически означает, что вы не можете использовать его вообще.

Ответ 4

В ссылке, о которой вы говорили в Вопросе, четко сказано, что она нестандартная.
То есть этот код является экспериментальным, а не частью спецификации ECMA.

Это работает только в Moz, потому что это их идея и до сих пор не полностью реализована.

Чтобы стать частью спецификации ECMA, требуется много шагов.

Сначала Moz создаст его, а затем предложит его, а затем только он будет принят.

До этого момента вы не можете использовать его на всех веб-сайтах.