Урок 13 по JScript: Оператор throw

Урок 13 по JScript: Оператор throw Программирование на JSCRIPT

В этой статье мы познакомимся с jscript инструкцией throw js сценариев. Инструкция throw позволяет в сценариях js генерировать исключительную ситуацию, которая впоследствии, может обрабатываться конструкцией try catch. Может возникнуть логический вопрос – зачем генерировать исключительную ситуацию (ошибку), если можно просто задать условие, при котором будет происходить простой вывод сообщения?

Как не странно, но это так, следующий пример это демонстрирует:

// *****************************************************************// Пример создания исключительной ситуации (js throw)// throw.js// *****************************************************************  function summ(){ var s=0;     for(var i=0; i<=100; i++){                 s+=i;     }return s;    //5050 } WScript.echo(summ());  function summ1(){ var s=0;     for(var i=0; i<=100; i++){                 s+=i;                 if(s>1000){                            WScript.Echo("Переменная s больше 1000");                            break;                 }     }return s;    //500 } WScript.echo(summ1());             function summ2(){ var s=0;     for(var i=0; i<=100; i++){                 try{                            s+=i;                            if(s>1000)thrownew Error("Переменная s больше 1000");                 }catch(e){                            if(e!=0){                                        WScript.Echo(e.description);                                        break;                            }                 }     }return s;    //500} WScript.echo(summ2());

В данном примере мы прописали три функции (sum(), summ1() и summ2()), все они выполняют практически одну задачу – нахождение суммы чисел от 0 до 100. В первой функции мы получим результат в 5050, а во-вторых – 1035. В функции summ1() мы прописали условие, что если переменная s будет больше или ровно 1000, то произвести выход из цикла с помощью оператора break. В функции summ2() мы использовали js throw инструкцию, видим, что после нее идет создание объекта Windows Script Host – Error, в качестве параметра мы передали ему сообщение: «Переменная s больше 1000», то есть, мы генерировали собственную ошибку с условие появления при s больше или ровно 1000. Что бы данную ошибку обработать, используется конструкция try catch. Видим, что тут мы тоже прописали оператор break.

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

Стоит учитывать, что после оператора throw может следовать не только новый объект Error, но и простая строка или число:

// *****************************************************************// Пример создания исключительной ситуации (js throw)// throw_1.js// *****************************************************************  function new_summ(){ var s=0;     for(var i=0; i<=100; i++){                 try{                            s+=i;                            if(s>1000)throw"Переменная s больше 1000";                 }catch(e){                            if(e!=0){                                        WScript.Echo(e);                                        break;                            }                 }     }return s;    //500} WScript.echo(new_summ());

Как видим, в данном случае мы после throw просто прописали строку «Переменная s больше 1000».

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

// ***********************************************************// Пример создания исключительной ситуации (js throw)// throw_2.js// *********************************************************** var i=0, msg="Результат деления 15 наnn", e, msg_err="Ошибка деления!!!nn"; // Объявляем функцию my_funvar my_fun =function(x,y){return x +y;} // Объявляем объект my_objvar my_obj ={a:10, b:100}; // Объявляем массив my_arr из 7 элементов!var my_arr=[5,7.5,0,"строка",2, my_fun, my_obj]; while (i <=7){//результат деленияvar result;     try{                 result=15/my_arr[i];                 //генерируем сообщение об ошибке                 if(!isFinite(result))thrownew Error("my_arr["+ i +"]: "+ my_arr[i]);     }catch(e){                 if(e!=0){                            msg_err+=e.description+"n";                 }     }finally{                         if(isFinite(result)) msg+="my_arr["+ i +"]: "+ my_arr[i]+" tровно: "+ result +"n";                 i++;     }}WScript.echo(msg +"n"+ msg_err);

В данном примере мы создали массив my_arr, который состоит из 7 элементов, числа, строка, функция и объект, причем, одно из чисел ровно 0. В цикле происходит деление числа 15 на каждый элемент массива. При делении на ноль, строку, функцию и объект ошибки не произойдёт, так как сам язык Jscript вернёт типы данных NaN – не число и infinity – бесконечность. Что бы вручную генерировать сообщение об ошибке, мы использовали оператор throw в js сценарии. Есть функция isFinite(х), которая вернёт true лишь в том случае, если переменная х не имеет тип данных NaN или infinity.

Используя данную функцию, мы прописали условие:

if (!isFinite(result)) throw new Error("my_arr[" + i + "]: " + my_arr[i]);

Само сообщение об ошибке будет храниться в переменной msg_err, а переменная msg будет хранить только правильный результат деления.

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