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.
Bu interaktif örneğin için kaynak bir GitHub deposunda saklanır. Etkileşimli örnek projesine katkıda bulunmak isterseniz, lütfen https://github.com/mdn/interactive-examples klonlayın ve bize bir request isteği gönderin.
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
Specification | Status | Comment |
---|---|---|
ECMAScript 3rd Edition (ECMA-262) | Standard |
Başlangıç Javascript 1.4 |
ECMAScript 5.1 (ECMA-262) The definition of 'throw statement' in that specification. |
Standard | |
ECMAScript 2015 (6th Edition, ECMA-262) The definition of 'throw statement' in that specification. |
Standard | |
ECMAScript (ECMA-262) The definition of 'throw statement' in that specification. |
Living Standard |
Browser compatibility
BCD tables only load in the browser