Web-программист
казанского центра Интернет
Степанищев Е.В.
CitForum
www.codenet.ru
Пояснение для людей не знакомых с
данной конструкцией
Конструкция 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 пополнился еще одной
полезной конструкцией, существенно
упрощающей жизнь программиста.