Блоки try... catch... finally... в JScript 5.
Пояснение для людей не знакомых с данной конструкцией
Конструкция try – catch - finally предназначена для перехвата ошибок (исключений). Если в блоке try каком-то операторе возникает ошибка, JScript игнорирует остальные операторы и переходит в блок catch, где находится блок обработки исключений. Последним выполняется блок finally, в котором обычно выполняют некие заключительные действия. Допускается использование неполной конструкции - без catch или finally.
Скажу сразу, что бы не было никаких недоразумений: JScript – это
JavaScript в интерпретации Microsoft, а 5-я версия предполагает наличие
Internet Explorer 5.0 (в 4-м IE всего лишь 3-я версия JScript).
Не знаю как вы, а я, сколько программирую на J[ava]Script мечтал,
что бы в этом языке появился наконец эта конструкция из двух слов,
но шли годы, а заветные слова так и оставались зарезервированными
и я уж было потерял всякую надежду, как вышел пятый IE...
И вот, однажды вечером, внося очередные изменения в свой JS Unix (http://www.chat.ru/~junix/) и роясь одновременно во внутренностях 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 (так же параметр конструктора) – строка, описание ошибки. Некоторые числовые значения и соответствующие им описания ошибок приведены в таблице ниже:
Номер ошибки |
Описание ошибки |
-2146823279 |
Определение отсутствует |
-2146827282 |
Предполагается наличие ‘)’ |
-2146827273 |
Незавершенная строковая константа |
-2146827286 |
Ошибка синтаксиса |
-2146827280 |
Предполагается наличие { |
-2146827850 |
Объект не поддерживает это свойство или метод |
-2146827843 |
Команда не поддерживается объектом |
-2146827859 |
Невозможно создание объекта сервером программирования объектов |
-2146828235 |
Файл не найден |
Существует способ программно возбудить исключение (создать ошибку) -
достаточно вызвать оператор throw с созданным ранее объектом Error. При
перехвате ошибки конструкцией try-catch созданный объект будет передан
блоку catch. Примеры:
var err=new Error(-10,"Неверное число"); throw(new Error(-4,"Ошибка"));
throw(err);
Таким образом JScript пополнился еще одной полезной конструкцией, существенно упрощающей жизнь программиста.
Web-программист казанского центра Интернет
Степанищев Е.В.