Урок 12 по JScript — конструкция try catch

Урок 12 по JScript — конструкция try catch Программирование на JSCRIPT

Всем привет, с вами автор блога scriptcoding.ru. В данной статье рассматривается конструкция try catch языка программирования JSCRIPT, конструкция try catch js отвечает за обработку исключительных ситуаций.

Исключительные ситуации являются не чем иным, как ошибками, которые возникают при выполнении тех или иных строк программного кода, например: деление на ноль, попытка получить доступ к несуществующему диску или каталогу, попытка обработать файл, для которого у вас нет прав доступа и так далее.

TRY CATCH состоит из трёх ключевых слов: try, catch и finally, между которыми прописываются фигурные скобки, содержащие тот или иной блок кода. Блок содержит программный код, в котором, может возникнуть ошибка, например: выражение, в котором может возникнуть деление на ноль; строка кода, которая производит чтение диска или папки. Если исключение не возникает, то блок try{…} никак не повлияет на работу сценария. Блок catch{…} оператора try catch js будет выполнен в том случае, если возникло исключение — тут идёт обработка номера ошибки и вывод нужных операторов. Блок finally{..} содержит так называемый код зачистки, то есть, он гарантированно выполняется независимо от того, что происходит в try{…}.

TRY … CATCH JS – обработка исключительных ситуаций

Давайте посмотрим на общий синтаксис try catch js:

try {

В большинстве случаев данный код работает без сбоев. Но, в определенный момент в нем может возникнуть сбой, либо вызванный инструкцией throw, либо через выполнение программного кода, который и вызывает сбой.

}catch (e) {

Данная часть выполняется только в случае возникновения сбоя, тут переменная e является ссылкой на объект Error или на другое значение, указанное в инструкции throw (смотрите ниже).

}finally {

Данная часть содержит инструкции, которые выполняются всегда, независимо от того, что произошло в блоке try{}.

}

js try catch

Хорошо, давайте рассмотри следующий программный код:

// ***********************************************************
// try catch js
// try_cath.js
// ***********************************************************
 
var i=0, msg="", e;
 
// Объявляем функцию my_fun
var my_fun = function(x,y){return x +y;}
 
// Объявляем объект my_obj
var my_obj = {a:10, b:100};
 
// Объявляем массив my_arr из 6 элементов!
var my_arr=[2,7.5,0,"abc", my_fun, my_obj];
 
while (i <= 10) {
var res;
//Сбой не возникнет!!!!
     try{
                 res=15/my_arr[i];
     }catch(e){
                 if (e!=0){
                            msg="Сбой!!!\n" + "Код: " + e.number +"\nОписание: " + e.description;
                            WScript.echo (msg);
                 }
     }finally{       
     i++;
     msg+=res + "\n";
     }
}
WScript.echo ("Результат деления \n" + msg);

И так, в данном примере мы создали массив my_arr, который хранит в себе 6 элементов:

  • 2 – целое число.
  • 7.5 – дробное число.
  • 0 — ноль.
  • «abc» — строка.
  • my_fun — функция.
  • my_obj — объект.

В цикле while (смотрите статью «Урок 10 по JScript: Цикл while и do…while«) происходит последовательное деление числа 15 на каждый элемент массива, хотя число элементов 6, но, я специально прописал в цикле значение 10. По логике работы, при делении на ноль, строку, функцию, объект и несуществующий индекс массива, оператор try catch js должен бы был генерировать ошибку в catch{}, но, как не странно, это не происходит, на выходе мы получим значения:

7.5, 2, Infinity, NaN, …, NaN.

Разгадка кроется в самом языке JScript, дело в том, что в нём определены типы данных NaN – не число и infinity – бесконечность (смотрите статью «Урок 2 по JScript: Объявление переменных«). Что бы явно указать, что в try{} оператора try catch возникает сбой, нужно использовать инструкцию throw, работу с ней я рассмотрел в статье «JScript: оператор throw«.

Хорошо, теперь давайте рассмотри сценарий, который уже точно позволит генерировать ошибку:

// ***********************************************************
// js try catch
// 1_try_catch.js
// ***********************************************************
 
//Объявляем переменные 
var FSO, Folder, Files, s="";     
 
//Создаем объект FileSystemObject
FSO=WScript.CreateObject("Scripting.FileSystemObject");
 
//Создаем объект Folder для каталога Windows диска D: 
try{
     Folder=FSO.GetFolder("D:\\Windows\\");  //Используем ESC-последовательность "\\" для символа "\"
}catch(e){
     if (e!=0){
                 msg="Сбой!!!\n" + "Код: " + e.number +"\nОписание: " + e.description;
                 WScript.echo (msg);
                 //Выход из сценария
                 WScript.Quit();
 
     }
}finally{            
     //Создаем коллекцию файлов                                                                                                                                                                                                                                                                                                                                                                                                                                                           try catch js
     Files=new Enumerator(Folder.Files);
     //Цикл по всем файлам  
     for (; !Files.atEnd(); Files.moveNext()) {  
                 s+=Files.item().Name+"\n";
     }        
     //Выводим полученный список файлов на экран
     WScript.echo(s);    
}
try cath js - обработка ошибок

Давайте рассмотрим данный пример, тут происходит обращение к каталогу Windows, который находится на диске D, если такого каталога не существует, то возникнет сбой программного кода и произойдёт вывод сообщения, которое будет содержать код ошибки (e.number) и её описание (e.description), далее наступит выход из сценария (WScript.Quit()). Как мы помним, код в finally{} выполняется независимо от того, была исключительная ситуация или нет, поэтому, если не прописать строку WScript.Quit(), то сценарий выведет сообщение об исключительной ситуации, а далее последует получение списка файлов, что тоже приведет к ошибке. Обратите внимание, что тут мы использовали такие внешние объекты сервера Windows Script Host как Folder – для работы с папками и FileSystemObject – работа с файловой системой, а также внутренний класс языка jscript – Enumerator.

Скачать архив с примерами

И так, давайте подведём итоги, в этой статье мы рассмотрели работу с конструкцией TRY … CATH, которая отвечает за обработку исключительных ситуаций в программном коде на языке JSCRIPT.

Оцените статью
Технологии программирования и ведение блога
Добавить комментарий

  1. SergeyJS

    Кстати, если нужно просто посмотреть/залогировать ошибки на клиентах — можно вообще не использовать try-catch. Достаточно заюзать один из сервисов отслеживания JS-ошибок: http://t.onthe.io/js/errors/, http://trackjs.com. Я остановился на первом из-за его бесплатности и простоты. Нужно скопировить и вставить всего 1 строку кода. Сразу видишь какие JS-ошибки происходят у пользователей, насколько они частые, в каких браузерах и тд.

    Ответить