Pri izvajanju JavaScript kode lahko pride do različnih napak. Napake so lahko v napisani kodi ali napačnem vnosu ali pa zardi kakšne druge nepredvidljive stvari. Ko pride do napake se JavaScript običajno ustavi in ustvari sporočilo o napaki. V JavaScriptu napake preverjamo, odkrivamo in izpisujemo sporočila z naslednjimi stanji:
Tray
in Catch
S try
definiramo blok kode, v katerem bomo preverjali napake med izvajanjem, catch
pa določa blok kode, ki se bo izvedel, če pride do napake v bloku kode, ki ga preverjamo s try
. Stanji try
in catch
vedno nastopata v paru, sintaktično pa ju zapišemo:
try {
Koda, ki jo preverjamo
}
catch(err) {
Koda, ki se izvede ob napaki
}
Primer, kjer je v kodi napaka:
<p id="primer"></p>
<script>
try {
prommmpt("Vpiši starost:");
}
catch(err) {
document.getElementById("primer").innerHTML = err.message;
}
</script>
Throw
Stanje throw
omogoča, da ustvarimo napako po meri oziroma da JavaScript sproži izjemo, ki je lahko niz, število, logična vrednost ali objekt. Sintaktično zapišemo:
throw izraz;
Primer:
throw "Napaka"; //generira izjemo, katere vrednost je niz
throw 48; //generira izjemo s številčno vrednostjo
throw false; //generira izjemo z logično vrednostjo
Primer, kjer preverjamo vnos v tekstovno polje. Če vnos ni pravilen JavaScript sproži izjemo throw
, ki se izpiše kot napaka:
<p>Vnesi številko meseca od 1 do 12:</p>
<input id="polje" type="text" size="3" />
<button type="button" onclick="mesec()">Vnesi</button>
<p id="info"></p>
<script>
function mesec() {
var info, x;
info = document.getElementById("info");
info.innerHTML = "";
x = document.getElementById("polje").value;
try {
if(x == "") throw "je prazna";
if(isNaN(x)) throw "ni število";
x = Number(x);
if(x < 1) throw "je prenizka";
if(x > 12) throw "je previsoka";
}
catch(napaka) {
info.innerHTML = "Vnesena vrednost " + napaka + "!";
}
}
</script>
Vnesi številko meseca od 1 do 12:
Finally
Stanje finally
omogoča izvajanje kode ne glede na rezultat preverjanja try/catch:
try {
Koda, ki jo preverjamo
}
catch(err) {
Koda, ki se izvede ob napaki
}
finally {
Koda, ki se izvede neglede na rezultat preverjanja try/catch
}
Primer, kjer preverjamo vnos v tekstovno polje. Če vnos ni pravilen JavaScript sproži izjemo throw
, ki se izpiše kot napaka, finally
pa izbriše vneseno vrednost v vnosno polje:
<p>Vnesi številko meseca od 1 do 12:</p>
<input id="polje" type="text" size="3" />
<button type="button" onclick="mesec()">Vnesi</button>
<p id="info"></p>
<script>
function mesec() {
var info, x;
info = document.getElementById("info");
info.innerHTML = "";
x = document.getElementById("polje").value;
try {
if(x == "") throw "je prazna";
if(isNaN(x)) throw "ni število";
x = Number(x);
if(x < 1) throw "je prenizka";
if(x > 12) throw "je previsoka";
}
catch(napaka) {
info.innerHTML = "Vnesena vrednost " + napaka + "!";
}
finally {
document.getElementById("polje").value = "";
}
}
</script>
Vnesi številko meseca od 1 do 12: