Ловить все исключения, выпадающие из блока кода
Синтаксис
Аргументы
- try_statements
- Код для выполнения и контроля над генерируемыми им исключениями
- catch_statements
- Все исключения будут попадать в блок
catch_statements
- exception_var
- Переменная, которой присваивается пойманное исключение
- finally_statements
- Блок
finally_statements
будет выполнен после окончания работы try/catch
, вне зависимости от того, было ли сгенерировано исключение
Описание, примеры
Конструкция try..catch
в javascript представлена в своей полной форме, включая необязательную ветку finally
.
Допускается использование всех трех форм:
try...catch
try...finally
try...catch...finally
В любом случае сначала выполняется код блока try
. Затем, если было исключение — оно перехватывается и выполняется код из catch
. Затем, вне зависимости от работы try/catch
, перед выходом из конструкции выполняется блок finally
.
Пример: tryEval
Запустим функцию tryEval
с некорректным кодом.
При этом eval бросит исключение класса SyntaxError, что приведет к переходу управления в catch
.
По окончанию catch
выполнится finally
.
Пример: некорректный код
tryEval( "Некорректный код" ) |
Если код — правильный, то блок catch
будет проигнорирован, но по окончании try
— в любом случае запустится finally
:
Пример: верный код
Как правило, в finally
ставят логирующий и очищающий состояние процессов код.
Вложенные try..catch
Зачастую в catch
нужно ловить не все подряд, а определенные исключения.
В javascript это реализуется через проверку, например, при помощи instanceOf:
if (!e instanceof MyError) { |
.. обработать исключение .. |
Пример с tryEval
с отловом ошибок будет выглядеть следующим образом.
Пример: отлов только синтаксических ошибок
if (!(e instanceof SyntaxError)) throw e |
tryEval( "throw new RangeError('исключение в корректном коде')" ) |
- При запуске код внутри eval генерирует ошибку
RangeError
.
- Блок
try..catch
внутри функции tryEval
ее ловит, но так как она не принадлежит классу SyntaxError
— бросает дальше
- Исключение выпадает из
tryEval
и ловится общим блоком в конце примера
Если исключение не поймано нигде — последний шанс его обработки до генерации javascript-ошибки: событие window.onerror
:
Пример: window.onerror
window.onerror = function () { |