Es gibt drei Arten von Programmierfehlern: (1) Syntaxfehler und (2) Laufzeitfehler (3) Logikfehler:
Syntaxfehler:
Syntaxfehler, auch Parsing-Fehler genannt, treten beim Kompilieren traditioneller Programmiersprachen auf und treten bei der Interpretation von JavaScript auf.
Zum Beispiel führt die folgende Zeile zu einem Syntaxfehler, weil eine schließende Klammer fehlt:
<script type="text/javascript"> <!-- window.print(; //--> </script>
Wenn in JavaScript ein Syntaxfehler auftritt, ist nur der im selben Thread enthaltene Syntaxfehler betroffen und Code in anderen Threads wird nicht ausgeführt.
Laufzeitfehler:
Bei der Ausführung (nach der Kompilierung/Interpretation) werden zur Laufzeit Fehler, auch Ausnahmen genannt, ausgelöst.
Die folgende Zeile verursacht beispielsweise einen Laufzeitfehler, da die Syntax hier korrekt ist, aber zur Laufzeit versucht wird, eine nicht vorhandene Methode aufzurufen:
<script type="text/javascript"> <!-- window.printme(); //--> </script>
Ausnahmen wirken sich auch auf den Thread aus, in dem sie auftreten, sodass andere JavaScript-Threads weiterhin normal ausgeführt werden können.
Logikfehler:
Logikfehler sind wahrscheinlich die am schwierigsten zu verfolgende Fehlerart. Diese Fehler sind nicht auf einen Syntax- oder Laufzeitfehler zurückzuführen. Wenn umgekehrt ein Fehler in der Skriptlogik auftritt, erhalten Sie nicht die erwarteten Ergebnisse.
Möglicherweise können Sie diese Fehler nicht erkennen, da es vom Programm abhängt, welche Art von Logik es auf den Geschäftsanforderungen basiert.
try...catch...finally Aussage:
Ausnahmebehandlungsfunktionen wurden in der neuesten Version von JavaScript hinzugefügt. JavaScript implementiert try...catch...finally-Strukturen und Throw-Operationen, um Ausnahmen zu behandeln.
Sie können vom Programmierer generierte Ausnahmen und Laufzeitausnahmen abfangen, nicht jedoch JavaScript-Syntaxfehler.
Hier ist die try...catch...finally Block-Syntax:
<script type="text/javascript"> <!-- try { // Code to run [break;] } catch ( e ) { // Code to run if an exception occurs [break;] }[ finally { // Code that is always executed regardless of // an exception occurring }] //--> </script>
Auf den Try-Block darf nur ein Catch-Block oder ein Final-Block (oder beides) folgen. Wenn im Try-Block eine Ausnahme auftritt, wird die Ausnahme in e platziert und der Catch-Block ausgeführt. Der optionale „final“-Block nach der try/catch-Anweisung wird bedingungslos ausgeführt.
Beispiel:
Unten sehen Sie ein Beispiel, in dem wir versuchen, eine nicht vorhandene Funktion aufzurufen, die eine Ausnahme auslöst. Mal sehen, wie es sich verhält, ohne try...catch:
<html> <head> <script type="text/javascript"> <!-- function myFunc() { var a = 100; alert("Value of variable a is : " + a ); } //--> </script> </head> <body> <p>Click the following to see the result:</p> <form> <input type="button" value="Click Me" onclick="myFunc();" /> </form> </body> </html>
Lassen Sie uns nun versuchen, diese Ausnahme mit try ... Catch abzufangen und eine benutzerfreundliche Meldung anzuzeigen. Sie können diese Meldung auch unterdrücken, wenn Sie diesen Fehler vor dem Benutzer verbergen möchten.
<html> <head> <script type="text/javascript"> <!-- function myFunc() { var a = 100; try { alert("Value of variable a is : " + a ); } catch ( e ) { alert("Error: " + e.description ); } } //--> </script> </head> <body> <p>Click the following to see the result:</p> <form> <input type="button" value="Click Me" onclick="myFunc();" /> </form> </body> </html>
Sie können den „finally“-Block verwenden, um nach der try/catch-Anweisung für immer bedingungslos auszuführen. Hier ist ein Beispiel:
<html> <head> <script type="text/javascript"> <!-- function myFunc() { var a = 100; try { alert("Value of variable a is : " + a ); }catch ( e ) { alert("Error: " + e.description ); }finally { alert("Finally block will always execute!" ); } } //--> </script> </head> <body> <p>Click the following to see the result:</p> <form> <input type="button" value="Click Me" onclick="myFunc();" /> </form> </body> </html>
Throw-Anweisung:
Sie können die throw-Anweisung verwenden, um Ihre integrierten oder benutzerdefinierten Ausnahmen zu erweitern. Später können diese Ausnahmen abgefangen und entsprechende Maßnahmen ergriffen werden.
Im Folgenden finden Sie Beispiele für die Verwendung von Throw-Anweisungen.
<html> <head> <script type="text/javascript"> <!-- function myFunc() { var a = 100; var b = 0; try{ if ( b == 0 ){ throw( "Divide by zero error." ); }else{ var c = a / b; } }catch ( e ) { alert("Error: " + e ); } } //--> </script> </head> <body> <p>Click the following to see the result:</p> <form> <input type="button" value="Click Me" onclick="myFunc();" /> </form> </body> </html>
Sie können eine Zeichenfolge, eine ganze Zahl, einen booleschen Wert oder ein Objekt verwenden, um eine Ausnahme in einer Funktion auszulösen. Anschließend können Sie die Ausnahme in derselben Funktion abfangen, die wir oben ausgeführt haben, oder einen try...catch-Block in anderen Funktionen verwenden.
onerror()-Syntax
Der onerror-Ereignishandler ist die erste Funktion, die JavaScript die Behandlung von Fehlern erleichtert. Das Fehlerereignis wird für das Fensterobjekt immer dann ausgelöst, wenn auf der Seite eine Ausnahme auftritt. Zum Beispiel:
<html> <head> <script type="text/javascript"> <!-- window.onerror = function () { alert("An error occurred."); } //--> </script> </head> <body> <p>Click the following to see the result:</p> <form> <input type="button" value="Click Me" onclick="myFunc();" /> </form> </body> </html>
Der onerror-Ereignishandler stellt drei Informationen bereit, um die genaue Art des Fehlers herauszufinden:
Hier ist ein Beispiel, wie diese Informationen extrahiert werden können
<html> <head> <script type="text/javascript"> <!-- window.onerror = function (msg, url, line) { alert("Message : " + msg ); alert("url : " + url ); alert("Line number : " + line ); } //--> </script> </head> <body> <p>Click the following to see the result:</p> <form> <input type="button" value="Click Me" onclick="myFunc();" /> </form> </body> </html>
Kann so angezeigt werden, wie Sie es für besser halten, um die Informationen zu extrahieren.
Sie können die Methode onError verwenden, um eine Fehlermeldung ohne Probleme beim Laden des Bildes wie folgt anzuzeigen:
<img src="myimage.gif" onerror="alert('An error occurred loading the image.')" />
Mit onerror können Sie bei Fehlern in vielen HTML-Tags entsprechende Informationen anzeigen.