2013-12-10 4 views
11

Какие поддерживаемые браузеры Условные выходы-исключения?Условные предложения catch - поддержка браузеров

На 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 
    } 
} 
+1

MDN - это ссылка на JavaScript. И JavaScript, я имел в виду реализацию Mozilla и надмножество ECMAScript. Таким образом, вы найдете эту функциональность в Firefox. Насколько я знаю, ни один другой главный браузер не использует реализацию Mozilla. * (Ну, есть IceWeasel, но это в основном бесплатная версия Firefox AFAIK.) * –

+1

Почему бы просто не попробовать в браузерах, которые вас волнуют? – Pointy

+0

Используйте второй способ, это так же читаемо и не намного больше кода. Реальный вопрос: почему ваша функция бросает EvalErrors? Пахнет. – sbking

ответ

3

На MDN попробовать ... поймать вы можете найти условные уловы положение нестандртных функций.

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

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

2

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

+0

no bro, или moz только? –

+0

@qarma кажется, что ты прав. Моз только. – Parris

4

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

А вот как сделать реализовать то же «Условные уловы положение» используя только простой 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 и дает ошибки на хроме и IE

Chrome

Uncaught SyntaxError: Unexpected token if 

IE

SCRIPT1006: Expected ')' 
2

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

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

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

Первые Moz строят его, а затем предлагают его, а затем только он будет принят.

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

Смежные вопросы