Modalități de tratare a erorilor


Uneori aveți nevoie de a afișa mesaje de eroare mai inteligibile (sau în alte limbi) decât cele generate standard de către JavaScript. Pentru aceasta se folosesc instrucțiunile try/throw/catch. Exemplu:


Cod:

<body>
<
script language="JavaScript" type="text/javascript">
<!--
raspuns prompt("Introduceti un numar:""")
try
    {
    if (!
raspuns || isNaN(raspuns))
        {
        throw new 
Error("Nu este un numar valid")
        }
    
alert("Radacina patrata a numarului " raspuns " este " Math.sqrt(raspuns))
    }
catch(
errMsg)
    {
    
alert(errMsg.message)
    }
-->
</
script>
</
body>


Să încerc în continuare să explic scriptul de mai sus.

raspuns = prompt("Introduceti un numar:", "")

Afișeaza un prompter normal în care se cere să introduceți un număr.

try
{

Dacă nu a fost introdus un număr se preia mesajul inițial de eroare și se schimbă cu altul. În cadrul instrucțiunii try se verifică dacă utilizatorul a introdus sau nu un număr.

if (!raspuns || isNaN(raspuns))
{
throw new Error("Nu este un numar valid")
}

Aici se verifică dacă utilizatorul a introdus ceva "!raspuns" sau dacă a introdus orice altceva în afară de număr "isNaN(raspuns)"
Dacă expresia "!raspuns" este adevarată, atunci utilizatorul nu a introdus nimic (a apăsat direct enter).
Metoda JavaScript isNaN verifică dacă parametrul care îi este pasat este sau nu numeric (Not a Number). Dacă isNaN() returnează adevărat, știm că valoarea nu este validă. Oricare ar fi cazul, trebuie să "lansam" (throw) o eroare: în acest context îi vom spune utilizatorului că nu a introdus un număr. Odată ce o eroare a fost lansată, JavaScript iese din blocul de cod try și caută instrucțiunea catch (prinde) corespunzătoare. Se sare peste toate celelalte linii de cod aflate între throw și catch.

alert("Radacina patrata a numarului " + raspuns + " este " + Math.sqrt(raspuns))

În cazul în care utilizatorul a introdus corect un număr se afișează rădăcina pătrată a numărului.

}

Aici se închide blocul try.

catch(errMsg)
{
alert(errMsg.message)
}

Aici, în cazul în care a fost lansată o eroare se utilizează blocul catch. Variabila errMsg este pasată ca parametru, și este afișată partea de mesaj (message) a erorii. Codul din cadrul blocului catch nu va fi executat decât dacă în timpul execuției a fost lansată o eroare.

Acest cod are și o parte opțională, și anume după catch se mai poate pune un bloc final {} care poate conține instrucțiuni care se execută indiferent dacă blocul try lansează sau nu o eroare.