JavaScript - Behandlung von Fehlern und Ausnahmen
Bei der Programmierung gibt es drei Arten von Fehlern: (a) Syntaxfehler, (b) Laufzeitfehler und (c) logische Fehler.
Syntaxfehler
Syntaxfehler, auch genannt parsing errors, treten zur Kompilierungszeit in traditionellen Programmiersprachen und zur Interpretationszeit in JavaScript auf.
Die folgende Zeile verursacht beispielsweise einen Syntaxfehler, da eine schließende Klammer fehlt.
<script type = "text/javascript">
<!--
window.print(;
//-->
</script>
Wenn in JavaScript ein Syntaxfehler auftritt, ist nur der Code betroffen, der im selben Thread wie der Syntaxfehler enthalten ist, und der Rest des Codes in anderen Threads wird ausgeführt, sofern nichts in ihnen vom Code abhängt, der den Fehler enthält.
Laufzeitfehler
Laufzeitfehler, auch genannt exceptions, treten während der Ausführung auf (nach Kompilierung / Interpretation).
Die folgende Zeile verursacht beispielsweise einen Laufzeitfehler, da hier die Syntax korrekt ist. Zur Laufzeit wird jedoch versucht, 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 die normale Ausführung fortsetzen können.
Logische Fehler
Logikfehler können die am schwierigsten zu ermittelnde Art von Fehlern sein. Diese Fehler sind nicht das Ergebnis eines Syntax- oder Laufzeitfehlers. Stattdessen treten sie auf, wenn Sie einen Fehler in der Logik machen, die Ihr Skript steuert, und Sie nicht das erwartete Ergebnis erhalten.
Sie können diese Fehler nicht abfangen, da es von Ihren Geschäftsanforderungen abhängt, welche Art von Logik Sie in Ihr Programm einfügen möchten.
Der Versuch ... fangen ... endlich Statement
Die neuesten Versionen von JavaScript haben Funktionen zur Ausnahmebehandlung hinzugefügt. JavaScript implementiert dietry...catch...finally konstruieren sowie die throw Operator, um Ausnahmen zu behandeln.
Sie können catch vom Programmierer erzeugte und runtime Ausnahmen, aber Sie können nicht catch JavaScript-Syntaxfehler.
Hier ist das try...catch...finally Blocksyntax -
<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>
Das try Auf den Block muss entweder genau einer folgen catch Block oder eins finallyBlock (oder einer von beiden). Wenn eine Ausnahme in dertry Block wird die Ausnahme eingefügt e und die catchBlock wird ausgeführt. Die Wahlfinally Block wird nach try / catch bedingungslos ausgeführt.
Beispiele
Hier ist ein Beispiel, in dem wir versuchen, eine nicht vorhandene Funktion aufzurufen, die wiederum eine Ausnahme auslöst. Mal sehen, wie es sich ohne verhälttry...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>
Ausgabe
Versuchen wir nun, diese Ausnahme mit zu fangen try...catchund eine benutzerfreundliche Nachricht anzeigen. Sie können diese Meldung auch unterdrücken, wenn Sie diesen Fehler vor einem 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>
Ausgabe
Sie können verwenden finallyBlock, der nach dem try / catch immer bedingungslos ausgeführt wird. 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>
Ausgabe
Die Throw-Anweisung
Sie können verwenden throwAnweisung zum Auslösen Ihrer integrierten Ausnahmen oder Ihrer benutzerdefinierten Ausnahmen. Später können diese Ausnahmen erfasst werden und Sie können eine entsprechende Aktion ausführen.
Beispiel
Das folgende Beispiel zeigt die Verwendung von a throw Erklärung.
<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>
Ausgabe
Sie können eine Ausnahme in einer Funktion mit einer Zeichenfolge, einer Ganzzahl, einem Booleschen Wert oder einem Objekt auslösen und diese Ausnahme dann entweder in derselben Funktion wie oben oder in einer anderen Funktion mit a erfassen try...catch Block.
Die onerror () -Methode
Das onerrorDer Ereignishandler war die erste Funktion, die die Fehlerbehandlung in JavaScript erleichterte. Daserror Das Ereignis wird für das Fensterobjekt ausgelöst, wenn auf der Seite eine Ausnahme auftritt.
<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>
Ausgabe
Das onerror Der Ereignishandler bietet drei Informationen, um die genaue Art des Fehlers zu ermitteln.
Error message - Dieselbe Meldung, die der Browser für den angegebenen Fehler anzeigen würde
URL - Die Datei, in der der Fehler aufgetreten ist
Line number- Die Zeilennummer in der angegebenen URL, die den Fehler verursacht hat
Hier ist das Beispiel, um zu zeigen, wie diese Informationen extrahiert werden.
Beispiel
<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>
Ausgabe
Sie können extrahierte Informationen so anzeigen, wie Sie es für besser halten.
Sie können eine verwenden onerror Methode, wie unten gezeigt, um eine Fehlermeldung anzuzeigen, falls beim Laden eines Bildes ein Problem auftritt.
<img src="myimage.gif" onerror="alert('An error occurred loading the image.')" />
Sie können verwenden onerror mit vielen HTML-Tags, um im Fehlerfall die entsprechenden Meldungen anzuzeigen.