Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...
Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...
Топ:
Определение места расположения распределительного центра: Фирма реализует продукцию на рынках сбыта и имеет постоянных поставщиков в разных регионах. Увеличение объема продаж...
Методика измерений сопротивления растеканию тока анодного заземления: Анодный заземлитель (анод) – проводник, погруженный в электролитическую среду (грунт, раствор электролита) и подключенный к положительному...
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов...
Интересное:
Инженерная защита территорий, зданий и сооружений от опасных геологических процессов: Изучение оползневых явлений, оценка устойчивости склонов и проектирование противооползневых сооружений — актуальнейшие задачи, стоящие перед отечественными...
Наиболее распространенные виды рака: Раковая опухоль — это самостоятельное новообразование, которое может возникнуть и от повышенного давления...
Влияние предпринимательской среды на эффективное функционирование предприятия: Предпринимательская среда – это совокупность внешних и внутренних факторов, оказывающих влияние на функционирование фирмы...
Дисциплины:
2017-06-29 | 223 |
5.00
из
|
Заказать работу |
|
|
Как бы мы хорошо ни программировали, в коде бывают ошибки. Или, как их иначе называют, «исключительные ситуации» (исключения). Обычно скрипт при ошибке, как говорят, «падает», с выводом ошибки в консоль. Но бывают случаи, когда нам хотелось бы как-то контролировать ситуацию, чтобы скрипт не просто «упал», а сделал что-то разумное. Для этого в JavaScript есть конструкция try..catch.
Конструкция try…catch
Конструкция try..catch состоит из двух основных блоков:
try {
// код...
} catch (err) {
// обработка ошибки
}
Работает она так:
Выполняется код внутри блока try. Если в нём ошибок нет, то блок catch(err) игнорируется, то есть выполнение доходит до конца try и потом прыгает через catch. Если в нём возникнет ошибка, то выполнение try на ней прерывается, и управление прыгает в начало блока catch(err). При этом переменная err (можно выбрать и другое название) будет содержать объект ошибки с подробной информацией о произошедшем. Таким образом, при ошибке в try скрипт не «падает», и мы получаем возможность обработать ошибку внутри catch.
Пример без ошибок:
try {
alert('Начало блока try'); // <--
//... код без ошибок
alert('Конец блока try'); // <--
} catch(e) {
alert('Блок catch не получит управление, так как нет ошибок');
}
alert("Потом код продолжит выполнение...");
Пример с ошибкой:
try {
alert('Начало блока try'); // <--
lalala; // ошибка, переменная не определена!
alert('Конец блока try');
} catch(e) {
alert('Ошибка ' + e.name + ":" + e.message + "\n" + e.stack); // <--
}
alert("Потом код продолжит выполнение...");
Объект ошибки
У него есть три основных свойства:
name
Тип ошибки:
EvalError - создаёт экземпляр, представляющий ошибку, возникающую в глобальной функции eval().
|
InternalError - создаёт экземпляр, представляющий ошибку, возникающую при выбрасывании внутренней ошибки в движке JavaScript. К примеру, «слишком глубокая рекурсия» («too much recursion»).
RangeError - создаёт экземпляр, представляющий ошибку, возникающую при выходе числовой переменной или параметра за пределы допустимого диапазона.
ReferenceError - создаёт экземпляр, представляющий ошибку, возникающую при разыменовывании недопустимой ссылки.
SyntaxError - создаёт экземпляр, представляющий синтаксическую ошибку, возникающую при разборе исходного кода в функции eval().
TypeError - создаёт экземпляр, представляющий ошибку, возникающую при недопустимом типе для переменной или параметра.
URIError - создаёт экземпляр, представляющий ошибку, возникающую при передаче в функции encodeURI() или decodeURI() недопустимых параметров.
message
Текстовое сообщение о деталях ошибки.
stack
Содержит строку с информацией о последовательности вызовов, которая привела к ошибке.
Оператор throw
Оператор throw генерирует ошибку. Синтаксис: throw <объект ошибки>.
Технически, в качестве объекта ошибки можно передать что угодно, это может быть даже не объект, а число или строка, но всё же лучше, чтобы это был объект, желательно – совместимый со стандартным, то есть чтобы у него были как минимум свойства name и message.
В качестве конструктора ошибок можно использовать встроенный конструктор: new Error(message) или любой другой.
Собственный тип ошибок
function MyError(message)
{
this.name = 'MyError';
this.message = message;
}
MyError.prototype = new Error();
MyError.prototype.constructor = MyError;
try
{
//...
throw new MyError();
//...
}
catch (exception)
{
if (exception instanceof MyError)
{
// Обрабатываем
}
else
{
throw exception; // Пропускаем дальше
}
}
Проброс исключения
В catch(e) мы анализируем объект ошибки, если он нам не подходит, то делаем throw e. При этом ошибка «выпадает» из try..catch наружу. Далее она может быть поймана либо внешним блоком try..catch (если есть), либо «повалит» скрипт.
|
Секция finally
Конструкция try..catch может содержать ещё один блок: finally. Выглядит этот расширенный синтаксис так:
try {
.. пробуем выполнить код..
} catch(e) {
.. перехватываем исключение..
} finally {
.. выполняем всегда..
}
Секция finally не обязательна, но если она есть, то она выполняется всегда: после блока try, если ошибок не было; после catch, если они были.
finally и return
Блок finally срабатывает при любом выходе из try..catch, в том числе и return (finally получает управление до того, как контроль возвращается во внешний код). Если внутри try были начаты какие-то процессы, которые нужно завершить по окончании работы, то в finally это обязательно будет сделано.
|
|
Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...
История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...
Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьшения длины пробега и улучшения маневрирования ВС при...
Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!