Ядро JavaScript 1.5. Справочник

       

Throw


Вызывает определяемое пользователем исключение.

Реализован в

JavaScript 1.4

Версия ECMA

ECMA-262, Edition 3


Синтаксис

throw expression;


Параметры

expression

Значение для throw.


Описание

Использование оператора throw для вызова исключения. Если вы вызываете исключение, оно специфицирует значение для исключения. Вот вызовы нескольких исключений.

throw "Error2";    // генерирует исключение со строковым значением

throw 42;          // генерирует исключение с числовым значением 42

throw true;        // генерирует исключение со значением true


Примеры



Пример 1: Отлов объекта.

При отлове исключения Вы можете специфицировать объект. Затем Вы можете обращаться к свойствам объекта в блоке catch. В этом примере создаётся объект myUserException типа UserException, и он используется в операторе throw.

function UserException (message) {

   this.message=message;

   this.name="UserException";

}

function getMonthName (mo) {

   mo=mo-1; // Уточняет число month относительно индекса массива (1=Jan, 12=Dec)

   var months=new Array("Jan","Feb","Mar","Apr","May","Jun","Jul",

      "Aug","Sep","Oct","Nov","Dec");

   if (months[mo] != null) {

      return months[mo];

   } else {

      myUserException=new UserException("InvalidMonthNo");

      throw myUserException;

   }

}

try {

   // операторы для try;

   monthName=getMonthName(myMonth)

}

catch (e) {

   monthName="unknown";

   logMyErrors(e.message,e.name); // передаёт объект исключения обработчику ошибок

}

Пример 2: Отлов объекта.

Здесь тестируется строка для ввода zip-кода США. Если zip-код использует неверный формат, оператор throw вызывает исключение, создавая объект типа ZipCodeFormatException.

/*

 * Создаётся объект ZipCode.

 *

 * Принимаемые форматы zip-кода:

 *    12345

 *    12345-6789

 *    123456789

 *    12345 6789

 *

 * Если аргумент, передаваемый ZipCode-конструктору, не соответствует

 * одному из этих патэрнов, вызывается исключение.

 */

function ZipCode(zip) {

   zip = new String(zip);

   pattern = /[0-9]{5}([- ]?[0-9]{4})?/;

   if (pattern.test(zip)) {

      // значением zip-кода будет первое найденное совпадение в строке

      this.value = zip.match(pattern)[0];

      this.valueOf = function (){return this.value};

      this.toString = function (){return String(this.value)};

   } else {

      throw new ZipCodeFormatException(zip);

   }

}

function ZipCodeFormatException(value) {

   this.value = value;

   this.message =

      "does not conform to the expected format for a zip code";

   this.toString =

      function (){return this.value + this.message};

}

/*

 * Эти строки могут находиться в скрипте, проверяющем данные адреса
 * для адресов США.

 */

var ZIPCODE_INVALID = -1;
var ZIPCODE_UNKNOWN_ERROR = -2;

function verifyZipCode(z) {

   try {

      z = new ZipCode(z);

   }

   catch (e) {

      if (e instanceof ZipCodeFormatException) {

         return ZIPCODE_INVALID;

      }

      else {

         return ZIPCODE_UNKNOWN_ERROR;

      }

   }

   return z;

}

a=verifyZipCode(95060);         // возвращает 95060

b=verifyZipCode(9560;)          // возвращает -1

c=verifyZipCode("a");           // возвращает -1

d=verifyZipCode("95060");       // возвращает 95060

e=verifyZipCode("95060 1234");  // возвращает 95060 1234

 

Пример 3: Повторный вызов исключения.

Вы можете использовать throw для повторного вызова исключения после его отлова. Следующий пример отлавливает исключение с числовым значением и вызывает его повторно, если его значение больше 50. Повторно вызванное исключение передаётся в содержащую функцию, или на верхний уровень так, чтобы пользователь увидел его.

try {

   throw n // вызывает исключение с числовым значением

}

catch (e) {

   if (e <= 50) {

      // операторы для обработки исключений 1-50

   }

   else {

      // не может обработать это исключение, поэтому вызывает его повторно

      throw e

   }

}


См. также



Содержание раздела