JavaScript - Обработка исключений

На этом уроке мы познакомимся с оператором обработки исключений try...catch, который предназначен для перехвата ошибок в некотором блоке кода и их обработки.

Оператор обработки исключений try...catch обычно применяется в следующих ситуациях:

  • Для некоторого участка кода, в котором может возникнуть ошибка;
  • Для валидации (проверки) данных перед отправкой на сервер;
  • Для использования в сложных случаях при написании кроссбраузерных приложений.

Теперь давайте рассмотрим, что же произойдет в сценарии на JavaScript при возникновении ошибки и для чего нужен оператор try...catch.

Если в сценарии на языке JavaScript появится ошибка, то дальнейшее выполнение программы будет прекращено. Т.е. инструкции (операторы), которые идут после ошибки выполняться не будут. Но если нам необходимо выполнение программы не прерывать, а переходить к следующей инструкции после той, где может возникнуть ошибка, то эту инструкцию необходимо заключить в оператор "try...catch".

Принцип работы с оператором try...catch заключается в следующем:

Блок, в котором могут возникнуть ошибки, мы обрамляем фигурными скобками, и перед ним пишем ключевое слово try (с англ. попробовать). После этого блока пишем ключевое слово catch (с англ. поймать, ловить) и в круглых скобках указываем переменную, в которой будем хранить информацию об ошибке. Далее фигурными скобками обрамляем блок, предназначенный для обработки ошибок.

Синтаксис оператора обработки исключений try...catch

Оператор обработки исключений работает следующим образом:

Сначала он пытается выполнить все инструкции (операторы), указанные в блоке try. Если внутри блока try ошибки не возникает, то блок catch просто игнорируется, т.е. он не выполняется. В том случае если внутри блока try возникает ошибка, то оставшиеся операторы в этом блоке будут проигнорированы (т.е. они выполняться не будут) и сразу же начнут выполняться операторы внутри блока catch. Самое главное то, что инструкции, идущие после оператора try...catch, продолжат выполняться и работа программы не остановится.

try
{
document.write("Первая строка");
documant.write("Вторая строка");
document.write("Третья строка");
}
catch (e)
{
alert("Ошибка :" + e.message);
}

В результате выполнения кода в 4 строчке произойдет ошибка, т.к. оператор documant браузером будет не определён. В этом случае 5 строчка браузером выполнена не будет, т.к. начнут выполняться операторы в блоке catch. В качестве параметра блока catch определим переменную e, в которой будет хранить информацию об ошибке. Данную переменную мы будем использовать в операторе alert для вывода сообщения об ошибке.

Ошибка Синтаксис оператора обработки исключений try...catch

У оператора обработки исключений есть ещё один блок, который называется finally. Данный блок является не обязательным, и его можно использовать только при необходимости. Он не имеет параметров и в отличие от блока catch выполняется всегда, вне зависимости от того возникла ошибка или нет.

Но так как инструкции, идущие после оператора try...catch тоже выполняются всегда, то возникает вопрос: "Зачем нужен блок finally?"

На самом деле, инструкции, идущие после try...catch, выполняются не всегда. Это может произойти только в том случае, если произойдет ошибка в блоке catch. Когда это произойдёт, программа приостановит своё выполнение и операторы, идущие после конструкции try...catch выполняться не будут. Единственный блок инструкций (операторов), который будет выполняться – это блок finally.

try
{
document.write("Первая строка
"); documant.write("Вторая строка
"); document.write("Третья строка
"); } catch (e) { alrt("Ошибка :" + e.message); } finally { document.write("Завершающие действия"); } alert("Операторы после try...catch");

В результате выполнения кода оператор alert, идущий после конструкции try...catch так и не будет выполнен.

Назначение блока finally



   JavaScript и jQuery 0    1575 0

Комментарии (3)

  1. Mixail # 0
    Здравствуйте. У меня вопрос где необходимо применять try...catch при создании сайта?

    1. Александр Мальцев # 0
      Здравствуйте.
      Там где могут возникнуть ошибки. Т.к. когда возникает ошибка, остальной код JavaScript не выполняется, а это может привести к неработоспособности страницы.
      А на практике обработка исключений используется довольно редко, т.к. ошибки в большинстве случаев могут возникнуть именно при выполнении асинхронных операций. А блок try/catch не работает с асинхронными операциями.
      Конструкция try/catch может только работать с синхронными операциями. А поскольку синхронные операции не должны выдавать ошибки, то в этом случае применение этой конструкции в большей степени сводится к кроссплатформенной разработке. Т.е. допустим, Вы написали некоторый функционал, и Вы точно не знаете, будет ли он работать во всех браузерах или нет. Это может произойти что один браузер поддерживает какой-то метод, а другой нет. В этом случае этот код необходимо обернуть в try/catch.
    2. Александр # 0
      Автор спасибо за хорошие статьи. Я сейчас изучаю JS по двум зарубежным книгам, недостающее и недопонятое собираю с двух русскоязычных ресурсов, один из них — Ваш. Очень привлекает то, что много информации подаётся в доступной графической форме (ну т.е. графики/чертежи/схемы), продолжайте пожалуйста в том же духе!

      Вы должны авторизоваться, чтобы оставлять комментарии.