Bu çeviri eksik. Bu makaleyi İngilizceden tercüme etmemize yardım edin
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 istisna atmak için throw ifadesini kullanın. Bir istisna atarken, ifade istisnanın değerini belirtir. Aşağıdakilerin her biri bir istisna atar:
throw 'Error2'; // String bir ifade ile istisna oluşturur.
throw 42; // Integer bir değerde değer oluşturur.
throw true; // Boolean bir ifade de istisna 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
| Desktop | Mobile | Server | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
throw | Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | IE Full support 5 | Opera Full support 4 | Safari Full support 1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 10.1 | Safari iOS Full support 1 | Samsung Internet Android Full support 1.0 | nodejs Full support 0.1.100 |
Legend
- Full support
- Full support