Try...catch
Помечает блок операторов для попытки выполнения и специфицирует ответ, который должен выполняться, если вызывается исключение.
Реализован в |
JavaScript 1.4 JavaScript 1.5, NES 6.0: добавлены множественные блоки catch (расширение Netscape). | ||
Версия ECMA |
ECMA-262, Edition 3 |
Синтаксис
try {
statements
}
[catch (exception_var if expression)
{statements}] . . .
[catch (exception_var) {statements}]
[finally {statements}]
Параметры
statements |
Блок операторов, выполняемый однократно. Операторы могут быть декларативными (как var) или исполняемыми (как for).
catch
Описание
Оператор try...catch состоит из блока try, который содержит один или более операторов, и одного или более блоков catch, который содержит операторы, специфицирующие поведение при вызове исключения в блоке try. То есть, Вы можете продолжить блок try и, если это потерпит неудачу, передать управление в блок catch. Если любой оператор в блоке try (или в функции, вызываемой из блока try) вызывает исключение, управление немедленно передаётся блоку catch. Если исключение в блоке try не было вызвано, блок catch пропускается. Блок finally выполняется после выполнения блоков tru и catch, но до операторов, идущих после оператора try...catch.
Можно вкладывать друг в друга один или более операторов try...catch. Если внутренний оператор try...catch не имеет блока catch, выполняется вход в содержащий ("внешний") блок catch оператора try...catch.
Вы можете также использовать оператор try...catch для обработки исключений Java. См. в книге
информацию об исключениях Java.
Безусловный блок catch.
Если используется единственный безусловный блок catch, то вход в блок catch выполняется при вызове исключения. Например, это код вызывает исключение. Если исключение возникает, управление передаётся в блок catch.
try {
throw "myException" // генерирует исключение
}
catch (e) {
// операторы для обработки любого исключения
logMyErrors(e) // объект исключения передаётся обработчику ошибок
}
Условные блоки catch.
Вы можете использовать один или несколько блоков catch для обработки специфических исключений. В этом случае вход в нужный блок catch выполняется при вызове специфицированного исключения. В следующем примере блок try может потенциально вызвать три исключения: TypeError, RangeError и EvalError. Если исключение возникает, управление передаётся в соответствующий блок catch. Если исключение не является одним из специфицированных, управление переходит к безусловному блоку catch в конце. Если Вы используете безусловный блок catch с одним или более условных блоков catch, безусловный блок catch обязан быть специфицированным в конце.
try {
myroutine(); // может вызывать три исключения
}
catch (e if e instanceof TypeError) {
// операторы для обработки исключений TypeError
}
catch (e if e instanceof RangeError) {
// операторы для обработки исключений RangeError
}
catch (e if e instanceof EvalError) {
// операторы для обработки исключений EvalError
}
catch (e){
// операторы для обработки любого неспецифицированного исключения
logMyErrors(e) // передаёт объект исключения обработчику исключений
}
Идентификатор исключения.
Если исключение вызывается в блоке try, exception_var содержит значение, специфицированное оператором throw; Вы можете использовать этот идентификатор для получения информации о вызванном исключении.
JavaScript создаёт этот идентификатор при входе в блок catch; этот идентификатор существует только в период работы блока catch; после того как блок catch завершает выполнение, идентификатор становится недоступным.
Блок finally.
Блок finally содержит операторы, выполняемые после выполнения блоков try и catch, но перед операторами, идущими после оператора try...catch. Блок finally выполняется независимо от того, было ли вызвано исключение. Если исключение вызывается, оператор в блоке finally выполняется даже тогда, когда ни один блок catch не обработал исключение.
Вы можете использовать блок finally для того, чтобы Ваш скрипт "изячно" завершался при возникновении исключения; например, может понадобиться освободить ресурс, задействованный скриптом. В следующем примере файл открывается, и выполняются операторы, использующие этот файл (серверный JavaScript позволяет получить доступ файлам). Если исключение вызывается при открытом файле, блок finally закрывает файл до краха скрипта.
openMyFile()
try {
// связывается ресурс
writeMyFile(theData)
}
finally {
closeMyFile() // всегда закрывает ресурс
}
Примеры
См. примеры для .
См. также
.