11.6. Множественные блоки catch

В JavaScript 1.5 инструкция try/catch была добавлена возможность использовать несколько блоков catch. Чтобы использовать эту возможность, необходимо, чтобы за именем параметра блока catch следовало ключевое слово if и условное выражение:

try {

  // здесь могут возбуждаться исключения нескольких типов

  throw 1;

}

catch(e if е instanceof ReferenceError) {

  // Здесь обрабатывается исключение обращения к неопределенному имени

}

catch(e if е === "quit”) {

  // Обработка исключения, получаемое в результате возбуждения сроки "quit"

}

catch(e if typeof e === "string") {

  // Здесь обрабатываются все остальные строковые исключения

}

catch(e) {

  // Здесь обрабатываются любые другие исключения

}

finally {

  // Блок finally действует как обычно

}

Когда возникает какое-либо исключение, по очереди проверяются все блоки catch. Исключение присваивается именованному параметру блока catch и вычисляется условное выражение. Если оно возвращает true, выполняется тело этого блока catch, а все остальные блоки catch пропускаются. Если блок catch не имеет условного выражения, он ведет себя как блок с условным выражением if true и выполняется всегда, если перед ним не был встречен блок catch, удовлетворяющий условию. Если условное выражение присутствует во всех блоках catch и ни в одном из них условное выражение не вернуло true, исключение продолжит распространение как необработанное. Обратите внимание, что, поскольку условное выражение уже находится в круглых скобках блока catch, его не требуется еще раз заключать в скобки, как в обычных инструкциях if.