Načrtovanje in razvoj spletnih aplikacij

JavaScript napake

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: