Блоки try... catch... finally... в JScript 5Источник: codenet
Пояснение для людей, не знакомых с данной конструкцией Конструкция try - catch - finally предназначена для перехвата ошибок (исключений). Если в блоке try в каком-то операторе возникает ошибка, JScript игнорирует остальные операторы и переходит в блок catch, где находится блок обработки исключений. Последним выполняется блок finally, в котором обычно выполняют некие заключительные действия. Допускается использование неполной конструкции - без catch или finally. Скажу сразу, чтобы не было никаких недоразумений: JScript - это JavaScript в интерпретации Microsoft, а 5-я версия предполагает наличие Internet Explorer 5.0 (в 4-м IE всего лишь 3-я версия JScript). И вот, однажды вечером, внося очередные изменения в свой JS Unix и роясь одновременно во внутренностях 5-го "зонда", взгляд мой зацепил знакомые "try, catch" и незнакомое "Error". Смутная надежда маленьким мерцающим огоньком загорелась в моей душе. Осторожно, не давая ей погаснуть, я протянул руки к клавиатуре, набрал try... catch... и в место досадного "зарезервированные слова" получил радостное "предполагается наличие }". Надо было видеть меня в тот момент (или слышать), каюсь: я кричал, что Гейтс молодчина. Каюсь, потому что Гейтс - плохой дядя, сделал в пятой версии то, что надо было сделать еще в первой. Ну да ладно, это все замечательно, но надо было сделать так, чтобы кроме пятого эксплорера остальные браузеры не замечали этот блок. Хорошо, что в JScript есть такая замечательная вещь, как условная компиляция. Воспользовавшись ею можно скрыть все что угодно от посторонних глаз Netscape Navigator и Internet Explorer 4.01 и ниже. Таким образом, вся конструкция выглядит так (после точки с запятой - мои комментарии): /*@cc_on @*/ ; Включаем условную компиляцию /*@if (@_jscript_version>4) ; Проверяем версию JScript try ; Сам блок try {@end @*/ Result=eval(expression); ; Делаем что-то полезное /*@if (@_jscript_version>4) } catch (err) ; "Ловим" ошибку { alert(err.description); ; Сообщение об ошибке Result=''; } finally { alert(Result); ; Завершающие действия }; @end @*/ /*@cc_off @*/ ; Выключаем условную компиляцию Где еrr - имя объекта Error, который будет создан при возникновении ошибки, в него будут помещены параметры ошибки. Объект Error имеет три конструктора и два свойства: err=new Error(); err=new Error(number); err=new Error(number,description);
Свойство (и параметр конструктора) number - числовое значение (номер ошибки), свойство description (также параметр конструктора) - строка, описание ошибки. Некоторые числовые значения и соответствующие им описания ошибок приведены в таблице ниже:
Существует способ программно возбудить исключение (создать ошибку) - достаточно вызвать оператор throw с созданным ранее объектом Error. При перехвате ошибки конструкцией try-catch созданный объект будет передан блоку catch. Примеры: var err=new Error(-10,"Неверное число"); throw(err); throw(new Error(-4,"Ошибка")); Таким образом, JScript пополнился еще одной полезной конструкцией, существенно упрощающей жизнь программиста. |