Ядро JavaScript 1.5. Справочник

       

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.

exception_var Идентификатор объекта исключения.expression

Выражение для тестирования.

finally Блок операторов, выполняемый до завершения оператора try...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() // всегда закрывает ресурс

}


Примеры

См. примеры для .


См. также

.



Содержание раздела