Try Catch Yapısında Throw Durumu
Try-Catch denetim yapısı hataları yakalamak için kullanılmaktadır. Try bölümünde bir hata bulunursa, o hata ile ilgili bilgiyi catch bölümüne atar. Eğer içi içe try-catch kullanılıyorsa bir önceki try-catch yapısına hatayı fırlatmak için throw kullanılır. Throw’dan fırlatılan hata bir dıştaki catch tarafından tekrar tutulur.
Throw, and Try...Catch...Finally
Bu try
ifade çalıştırılacak (denenecek) bir kod bloğu tanımlar.
Bu catch
ifade herhangi bir hatayı işleyecek bir kod bloğu tanımlar.
Bu finally
ifade, sonuçtan bağımsız olarak çalıştırılacak bir kod bloğu tanımlar.
Bu throw
ifade özel bir hatayı tanımlıyor.
Hatalar Olacak!
JavaScript kodunu çalıştırırken farklı hatalar ortaya çıkabilir.
Hatalar, programcının yaptığı kodlama hataları, yanlış girdilerden kaynaklanan hatalar ve öngörülemeyen diğer şeyler olabilir.
Örnek
Bu örnekte, kasıtlı olarak bir hata üretmek için "alert" kelimesini "adddlert" olarak yanlış yazdık:
<p id="demo"></p>
<script>
try {
adddlert("Welcome guest!");
}
catch(err) {
document.getElementById("demo").innerHTML = err.message;
}
</script>
JavaScript, adddlert'i bir hata olarak yakalar ve bunu işlemek için catch kodunu yürütür.
JavaScript try and catch
Bu try
ifade, yürütülürken hatalara karşı test edilecek bir kod bloğu tanımlamanıza olanak tanır.
Bu catch
ifade, try bloğunda bir hata oluşması durumunda yürütülecek kod bloğunu tanımlamanıza olanak tanır.
JavaScript ifadeleri try
ve catch
çiftler halinde gelir:
try {
Denenecek kod bloğu
}
catch(err) {
Hataları işlemek için kod bloğu
}
JavaScript Hata Veriyor
Bir hata oluştuğunda JavaScript normalde durur ve bir hata mesajı üretir.
Bunun teknik terimi şudur: JavaScript bir istisna (bir hata) fırlatacaktır .
JavaScript aslında iki özelliğe sahip bir Error nesnesi oluşturacaktır : (throw an error) .
throw Kullanımı
Bu throw
ifade, özel bir hata oluşturmanıza olanak tanır.
Teknik olarak bir istisna (bir hata) fırlatabilirsiniz .
String
İstisna bir JavaScript , a Number
, a Boolean
veya bir olabilir Object
:
throw "Too big"; // throw a text
throw 500; // throw a number
ve throw
ile birlikte try
catch
kullanırsanız program akışını kontrol edebilir ve özel hata mesajları üretebilirsiniz.
Giriş Doğrulama Örneği
Bu örnek girdiyi inceler. Değer yanlışsa, bir istisna (err) atılır.
İstisna (err), catch ifadesi tarafından yakalanır ve özel bir hata mesajı görüntülenir:
<!DOCTYPE html>
<html>
<body>
<p>Please input a number between 5 and 10:</p>
<input id="demo" type="text">
<button type="button" onclick="myFunction()">Test Input</button>
<p id="p01"></p>
<script>
function myFunction() {
const message = document.getElementById("p01");
message.innerHTML = "";
let x = document.getElementById("demo").value;
try {
if(x.trim() == "") throw "empty";
if(isNaN(x)) throw "not a number";
x = Number(x);
if(x < 5) throw "too low";
if(x > 10) throw "too high";
}
catch(err) {
message.innerHTML = "Input is " + err;
}
}
</script>
</body>
</html>
finally Kullanımı
Bu finally
ifade, try ve catch komutlarından sonra, sonuçtan bağımsız olarak kod çalıştırmanıza olanak tanır:
try {
Block of code to try
}
catch(err) {
Block of code to handle errors
}
finally {
Block of code to be executed regardless of the try / catch result
}
Örnek
function myFunction() {
const message = document.getElementById("p01");
message.innerHTML = "";
let x = document.getElementById("demo").value;
try {
if(x.trim() == "") throw "is empty";
if(isNaN(x)) throw "is not a number";
x = Number(x);
if(x > 10) throw "is too high";
if(x < 5) throw "is too low";
}
catch(err) {
message.innerHTML = "Error: " + err + ".";
}
finally {
document.getElementById("demo").value = "";
}
}
Hata Nesnesi
JavaScript'te, bir hata oluştuğunda hata bilgisi sağlayan yerleşik bir hata nesnesi vardır.
Hata nesnesi iki yararlı özellik sağlar: ad ve mesaj.
Hata Nesnesi Özellikleri
Özellik | Açıklma |
---|---|
name | Bir hata adı ayarlar veya döndürür |
message | Bir hata mesajı (bir dize) ayarlar veya döndürür |
Hata Adı Değerleri
Hata adı özelliği tarafından altı farklı değer döndürülebilir:
Error Name | Description |
---|---|
EvalError | An error has occurred in the eval() function |
RangeError | A number "out of range" has occurred |
ReferenceError | An illegal reference has occurred |
SyntaxError | A syntax error has occurred |
TypeError | A type error has occurred |
URIError | An error in encodeURI() has occurred |
Altı farklı değer aşağıda açıklanmıştır.
Değerlendirme Hatası
An EvalError
, eval() fonksiyonunda bir hata olduğunu gösterir.
JavaScript'in yeni sürümleri EvalError fırlatmaz. Bunun yerine SyntaxError kullanın.
Aralık Hatası
RangeError
Yasal değer aralığının dışında bir sayı kullanırsanız A hatası alırsınız.
Örneğin: Bir sayının anlamlı basamak sayısını 500 olarak ayarlayamazsınız.
Örnek
let num = 1;
try {
num.toPrecision(500); // A number cannot have 500 significant digits
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
Referans Hatası
ReferenceError
Bildirilmemiş bir değişkeni kullanırsanız (referans verirseniz) A atılır:
Örnek
let x = 5;
try {
x = y + 1; // y cannot be used (referenced)
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
Sözdizimi Hatası
SyntaxError
Sözdizimi hatası olan bir kodu değerlendirmeye çalışırsanız A fırlatılır.
Örnek
try {
eval("alert('Hello)"); // Missing ' will produce an error
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
Tür Hatası
TypeError
Bir işlenen veya bağımsız değişken bir operatör veya fonksiyon tarafından beklenen tiple uyumsuzsa A fırlatılır.
Örnek
let num = 1;
try {
num.toUpperCase(); // You cannot convert a number to upper case
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
URI (Tekdüzen Kaynak Tanımlayıcısı) Hatası
URIError
URI fonksiyonunda yasa dışı karakterler kullanırsanız bir hata oluşur:
Örnek
try {
decodeURI("%%%"); // You cannot URI decode percent signs
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
Tam Hata Referansı
Error nesnesinin tam referansı için Tam JavaScript Hata Referansımıza gidin .
Örnek
try {
var a = nonexist.b;
// Hatanın olduğu yer...
} catch( myError ) {
// Hatayı yakalar
alert( myError.message );
// Mesaj verir..
throw( myError );
// Hatayı bir dışındaki try-catch'e fırlat..
}
} catch( myErrorObject ) {
// Buraya fırlatılan hata gelir...
alert( myErrorObject.message );
//Hata nesnesi aynı olacağından mesaj da aynı olur...
}
Yukarıda görüldüğü gibi genel kullanım böyledir. Daha fazla iç içe try-catch yapısı kullanmak işleri daha da kolay hale getirebilir.
try {
try {
var a = cıkıs;
} catch( Hata ) {
alert( Hata.message );
throw( Hata );
}
} catch( HataNesnesi ) {
alert( HataNesnesi.message );
}
</script>
Örnek
<head>
<script language="text/javascript">
yanlisIsim = new Error ("Sistem kulanici isimi ile uyusmuyor..");
bosIsim = new Error ("Sistem kullanici ismi girilmedi..");
function kontrolEt(e){
alert (e.message);
}
function validateForm(){
isimKontrol();
}
function isimKontrol(){
try {
if (document.forms[0].kullanici.value == ""){
throw bosIsim;
}
if (document.forms[0].kullanici.value != "fatih"){
throw yanlisIsim;
}
} catch (e) {
kontrolEt(e);
}
}
</script>
</head>
<body>
<form onSubmit="validateForm()">
Kullanici Ismini Girin: <input type="text" name="kullanici">
<input type="submit" name="submit" value="Gonder">
</form>
</body>
</html>
Kaynak