throw

Throw ifadesi kullanıcı tanımlı bir istisna atar. Mevcut işlevin yürütülmesi durur (atmadan sonraki ifadeler yürütülmez) ve kontrol, çağrı yığındaki ilk yakalama blokuna geçirilir. Arayanlar arasında yakalama bloğu yoksa, program sonlanır.

Syntax

throw ifade; 
ifade
Hata fırlatmak için ifade.

Açıklama

Bir hata fırlatmak için throw ifadesini kullanın. Bir hata fırlatırken, ifade hatanın değerini belirtir. Aşağıdakilerin her biri bir hata fırlatır:

throw 'Error2'; // String bir ifade ile hata oluşturur.
throw 42;       // Integer bir değerde hata oluşturur.
throw true;     // Boolean bir ifade de hata oluşturur.
throw new Error('Required');  // `Required` adıyla bir hata nesnesi oluşturur.

Also note that the throw statement is affected by automatic semicolon insertion (ASI) as no line terminator between the throw keyword and the expression is allowed.

Örnek

İstisna Nesnesi Örneği

Bir istisna atarken bir nesne belirtebilirsiniz. Daha sonra nesnenin özelliklerini catch bloğuna referansta bulabilirsiniz. Aşağıdaki örnek, UserException türünde bir nesne oluşturur ve bunu bir throw ifadesinde kullanır.

function UserException(message) {
   this.message = message;
   this.name = 'UserException';
}
function getMonthName(mo) {
   mo = mo - 1; // Dizi içinde bir ay sayısı belirlenir (1 = Jan, 12 = Dec)
   var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul',
      'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
   if (months[mo] !== undefined) {
      return months[mo];
   } else {
      throw new UserException('InvalidMonthNo');
   }
}

try {
   // try bloğu
   var myMonth = 15; // Bir yılda 15 ay bulunmaz.
   var monthName = getMonthName(myMonth);
} catch (e) {
   monthName = 'unknown';
   console.log(e.message, e.name); // catch bloğuna hata nesnesinin parametreleri giriliyor.
}

Bir istisnayı atmanın başka bir örneği

Aşağıdaki örnek, ABD posta kodu için bir giriş dizesini sınar. Posta kodu geçersiz bir format kullanıyorsa, throw ifadesi bir nesne türü oluşturarak bir istisna atar .

​​​​​​ZipCodeFormatException.

/*
 * Zip Kodu objesi oluşturulur.
 *
 * Kabul edilen zip kodları:
 *    12345
 *    12345-6789
 *    123456789
 *    12345 6789
 *
 * parametre kabul edilen zip kodlara uygun değilse
 * bir istisna atılır.
 */

function ZipCode(zip) {
   zip = new String(zip);
   pattern = /[0-9]{5}([- ]?[0-9]{4})?/;
   if (pattern.test(zip)) {
      // zip kodu değeri dizideki ilk eşleşme olacak
      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 = 'bir posta kodu için beklenen değerlerle uyuşmuyor';
   this.toString = function() {
      return this.value + this.message;
   };
}

/*
 * Zip kodlarını doğrulayan bir komut bloğu olabilir.
 */

const ZIPCODE_INVALID = -1;
const 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

Bir istisnayı tekrar atmak

Hatayı yakaladıktan sonra bir özel durumu geri almak için throw kullanabilirsiniz. Aşağıdaki örnek,

Seğer 50'nin üzerindeyse onu yeniden kullanır. Yeniden biçimlendirilmiş istisna, kullanıcının onu görebilmesi için kapama işlevine veya en üst düzeye kadar çoğalır..

try {
   throw n; // integer bir değerde istisna atar
} catch (e) {
   if (e <= 50) {
      // değer 1 ile 50 arasında ise
   } else {
      // tekrar bir istisna atar
      throw e;
   }
}

Specifications

Browser compatibility

BCD tables only load in the browser

See also