Синтаксис JavaScript Справочник JavaScript JSON Коды клавиш События Строгий режим

JavaScript: Исключения

Исключение – это сигнал о возникновении исключительной ситуации (иначе говоря ошибки) во время выполнения кода. При возникновении ошибки сценарий прекращает свою работу, а в консоль браузера выводится сообщение об ошибке:

alert(x);   // Ошибка. Используется неопределённая переменная

Чтобы, при возникновении исключительной ситуации, сценарий не просто прекратил свою работу, а сделал что-то полезное, можно использовать специальные инструкции try/catch/finally. Данные инструкции позволяют хоть как-то контролировать ситуацию при возникновении непредвиденных ошибок.

Инструкция try/catch

C помощью инструкции try/catch исключение можно перехватить и обработать. Синтаксис инструкции try/catch:

try {
  // Исполняемый код
}
catch (e) {
  // При возникновении ошибки, делаем что-то
}

В блоке try располагают код, в котором может возникнуть ошибка во время выполнения программы, а блок catch позволяет принять решение, что делать при возникновении ошибки. За ключевым словом catch следует идентификатор в круглых скобках. Этот идентификатор похож на параметр функции. При возникновении исключительной ситуации в блоке try, этому параметру в качестве аргумента неявно передаётся объект Error, содержащий сведения об ошибке. Например, объект Error имеет свойство name, содержащее сведения о типе ошибки и свойство message содержащее описание ошибки. Имя параметра в круглых скобках может быть любым допустимым идентификатором:

try {
  alert(x);
  alert(2 + 2);  // Не будет выполнено
} catch (e) {
  alert(e.name + ": " + e.message);
}

Как видно из примера, при возникновении исключения выполнение кода в блоке try прекращается и управление передаётся блоку catch. Если в блоке try ошибка не возникает, то блок catch просто игнорируется:

try {
  alert("Код в блоке try");  // Код без ошибок
} catch(e) {
  alert("Блок catch игнорируется");
}

alert("Продолжается выполнение кода после инструкции try/catch...");

Без инструкции try/catch сообщения об ошибках автоматически выводятся в консоль браузера.

Блок finally

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

try {
  alert("Код в блоке try");  // Код без ошибок
} catch(e) {
  alert("Блок catch игнорируется");
} finally {
  alert("Код в блоке finally");
}

try {
  alert(x);  // Ошибка
} catch(e) {
  alert("Код в блоке catch");
} finally {
  alert("Код в блоке finally");
}

Если исключение никак не планируется обрабатывать то, при наличии блока finally блок catch можно опустить:

try {
  alert(x);
} finally {
  alert("Код в блоке finally");
}

Блоки try, catch и finally начинаются и заканчиваются фигурными скобками. Это обязательная часть их синтаксиса, и она не может быть опущена, даже если внутри блока содержится только одна инструкция.

Инструкция throw

Инструкция throw позволяет явно сгенерировать исключение. Она имеет следующий синтаксис:

throw выражение;

Результатом выражения может быть значение любого типа. Например, это может быть число, представляющее код ошибки, или строка, содержащая текст сообщения об ошибке. Обычно, в качестве выражения создают стандартный объект типа Error. Значение выражения неявно передаётся в качестве аргумента блоку catch:

try {
  var x = -1;
  if (x < 0) throw new Error("x не может быть меньше нуля!");
} catch(e) {
  alert(e);
}

try {
  throw "Hello!";
} catch(e) {
  alert(e);
}

Если инструкция throw используется без инструкции try/catch то, сгенерированное исключение выводится в консоль браузера.

Копирование материалов с данного сайта возможно только с разрешения администрации сайта
и при указании прямой активной ссылки на источник.
2011 – 2024 © puzzleweb.ru | razumnikum.ru

Реклама на сайте | puzinfo@puzzleweb.ru | ruen