Блоки 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(err);
throw(new Error(-4,"Ошибка"));

Таким образом JScript пополнился еще одной полезной конструкцией, существенно упрощающей жизнь программиста.

Автор: Степанищев Евгений

Copyright © 2002-2006 Максим Комогоров. Все права защищены.
Замечания, вопросы и предложения направляйте
по адресу: webscript@pisem.net
Поиск по сайту
О проекте
Архив
Hosted by uCoz