Heim >Web-Frontend >js-Tutorial >Außergewöhnliche Ausnahmeregelung in JavaScript

Außergewöhnliche Ausnahmeregelung in JavaScript

Joseph Gordon-Levitt
Joseph Gordon-LevittOriginal
2025-02-26 08:38:10623Durchsuche

Exceptional Exception Handling in JavaScript

Kernpunkte

  • Die Ausnahmebehandlung von JavaScript wird durch die Aussage "Try ... Catch ... endlich" implementiert. Die Klausel "Try" enthält Code, die Ausnahmen erzeugen können, die Klausel "Catch" wird ausgeführt, wenn eine Ausnahme auftritt, und die "endgültige" Klausel wird unabhängig vom Ergebnis ausgeführt.
  • JavaScript verfügt über sieben integrierte Fehlerobjekte für die Ausnahmebehandlung: Fehler, RangeError, ReferenzError, SyntaxError, TypeError, Urierror und EvalError. Jedes Objekt repräsentiert einen bestimmten Fehlertyp.
  • JavaScript ermöglicht es Entwicklern, ihre eigenen Ausnahmen mit der Anweisung "Wurf" zu werfen. Dies kann den Code leichter zu debuggen und zu pflegen, da er die Erstellung sinnvoller Fehlermeldungen ermöglicht.
  • kann benutzerdefinierte Ausnahmetypen erstellen, indem der vorhandene "Fehler" -Typ erweitert wird. Dies ermöglicht eine spezifischere und relevantere Fehlerbehandlung in komplexen Anwendungen.

In der Softwareentwicklung gilt auch Murphy's Law: Alles, was schief gehen kann, wird schief gehen. Bei nicht-einfacher Programmen stellt sich die Frage nicht, ob einen Fehler macht, sondern wenn einen Fehler macht. Standard -inkompatible, nicht unterstützte Funktionen und Browserfunktionen sind nur einige Quellen potenzieller Probleme, mit denen Webentwickler konfrontiert sind. Angesichts all der Probleme, die auftreten können, hat JavaScript eine überraschend einfache Fehlerbehandlung - es gibt nur auf und scheitert lautlos. Zumindest ist dies das Verhalten des Benutzers. Tatsächlich sind viele Dinge hinter den Kulissen geschehen. Wenn eine JavaScript -Anweisung einen Fehler erzeugt, wird gesagt, dass sie eine

-Ausnahme

auswirkt. Der JavaScript -Interpreter führt die nächste Anweisung nicht weiter aus, sondern überprüft den Ausnahmebehandlungscode. Wenn es keinen Ausnahmebehandler gibt, kehrt das Programm aus einer Funktion zurück, die die Ausnahme auswirkt. Dies wiederholt jede Funktion auf dem Anrufstapel, bis der Ausnahmebehandler gefunden oder die oberste Funktion erreicht ist, wodurch das Programm beendet wird. Fehlerobjekt

Wenn eine Ausnahme auftritt, wird ein Objekt, das den Fehler darstellt, erstellt und geworfen. Die JavaScript-Sprache definiert sieben Arten von integrierten Fehlerobjekten. Diese Fehlertypen sind die Grundlage für die Ausnahmebehandlung. Jeder Fehlertyp wird nachstehend ausführlich beschrieben. Fehler

"Fehler" -Typ wird verwendet, um eine allgemeine Ausnahme anzugeben. Dieser Ausnahmetyp wird am häufigsten verwendet, um benutzerdefinierte Ausnahmen zu implementieren. Das Thema des Erstellens benutzerdefinierter Ausnahmen wird später in diesem Artikel erneut besucht. Das "Fehler" -Objekt wird durch Aufrufen des Konstruktors instanziiert, wie im folgenden Beispiel gezeigt:

"Fehler" -Objekt enthält zwei Eigenschaften, "Name" und "Nachricht". Die Eigenschaft "Name" gibt den Ausnahmetyp an (in diesem Fall "Fehler"). Die Eigenschaft "Nachricht" enthält eine detailliertere Beschreibung der Ausnahme. "Nachricht" erhält ihren Wert aus der Zeichenfolge, die an den Ausnahmebestrukturierer übergeben wurde. Die verbleibenden Ausnahmetypen stellen spezifischere Fehlertypen dar, werden jedoch auf die gleiche Weise wie der allgemeine "Fehler" -Typ verwendet.

RangeError

Wenn die Zahl den angegebenen Bereich überschreitet, wird eine "RangeRror" -Ausnahme generiert. Beispielsweise haben JavaScript -Nummern die methodische Methode für Tofixed (), die den Parameter "Ziffern" annimmt, um die Anzahl der Ziffern darzustellen, die nach dem Dezimalpunkt erscheinen. Dieser Parameter sollte zwischen 0 und 20 liegen (obwohl einige Browser einen breiteren Bereich unterstützen). Wenn der Wert der "Ziffern" außerhalb dieses Bereichs liegt, wird ein "RangerError" geworfen. Das folgende Beispiel zeigt dies.

<code class="language-javascript">var error = new Error("error message");</code>

referenceError

Bei der Zugriff auf nicht existierende Variablen wird eine "ReferenzError" -Ausnahme ausgelöst. Diese Ausnahmen treten normalerweise auf, wenn ein vorhandener variabler Name vorhanden ist, der falsch geschrieben wird. Im folgenden Beispiel tritt ein "ReferenzError" beim Zugriff auf "Balken" auf. Beachten Sie, dass dieses Beispiel davon ausgeht, dass "Bar" in keinem aktiven Bereich vorhanden ist, wenn versucht wird, Operationen zu erhöhen.

<code class="language-javascript">var pi = 3.14159;

pi.toFixed(100000);  // RangeError</code>

syntaxError

Wenn JavaScript -Sprachregeln verletzt werden, wird ein "SyntaxError" geworfen. Entwickler, die mit Sprachen wie C und Java vertraut sind, werden verwendet, um Syntaxfehler während der Zusammenstellung zu begegnen. Da JavaScript jedoch eine interpretierte Sprache ist, werden Syntaxfehler erst dann erkannt, wenn der Code ausgeführt wird. Syntaxfehler sind eindeutig, da sie der einzige Ausnahmetyp sind, aus dem nicht wiederhergestellt werden kann. Das folgende Beispiel generiert einen Syntaxfehler, da der Anweisung "If" die richtige Klammer fehlt.

<code class="language-javascript">function foo() {
  bar++;  // ReferenceError
}</code>

TypeError

Wenn der Wert nicht der erwartete Typ ist, tritt eine Ausnahme von "TypeError" auf. Der Versuch, eine nicht existierende Objektmethode aufzurufen, ist eine häufige Ursache für solche Ausnahmen. Das folgende Beispiel erstellt ein leeres Objekt mit dem Namen "Foo" und versucht dann, seine bar () -Methode aufzurufen. Da bar () nicht definiert ist, wird ein "Typeerror" geworfen, wenn versucht wird, es zu nennen.

<code class="language-javascript">if (foo) {  // SyntaxError
  // 缺少右花括号
}</code>

urierror

Wenn Methoden wie Encdeuri () und decodeuri () fehlformierte URI begegnen, wird eine "Urierror" -Ausnahme ausgelöst. Das folgende Beispiel generiert einen "Urierror", wenn versucht wird, die Zeichenfolge "%" zu dekodieren. Das "%" -Charakter zeigt den Beginn der URI -Fluchtsequenz an. Da es in diesem Beispiel nichts nach "%" gibt, ist die Zeichenfolge eine ungültige Escape -Sequenz und daher eine missgebildete URI -Komponente.

<code class="language-javascript">var foo = {};

foo.bar(); // TypeError</code>

EvalError

Wenn die Funktion eval () nicht verwendet wird, wird eine Ausnahme von "EvalError" ausgelöst. Diese Ausnahmen werden in der neuesten Version des ECMAScript -Standards nicht verwendet. Um jedoch die Abwärtskompatibilität mit älteren Versionsstandards aufrechtzuerhalten, werden sie weiterhin unterstützt.

Ausnahmebehandlung

Jetzt, da wir wissen, welche Ausnahmen sind, sollten wir lernen, wie sie verhindern können, dass das Programm abstürzt. JavaScript übernimmt Ausnahmen durch die Aussage "Try ... Fang ... endlich". Eine gemeinsame Beispielaussage ist unten aufgeführt.

<code class="language-javascript">decodeURIComponent("%"); // URIError</code>

Der erste Teil der Aussage "Try ... Catch ... endlich" ist die "Try" -Klausel. Die Klausel "Try" ist erforderlich, um Codeblöcke zu trennen, von denen Programmierer vermuten, Ausnahmen zu generieren. Die Klausel "Try" muss von ein oder zwei "Fang" und "endlich" Klauseln folgen.

"catch" -Klausel

Der zweite Teil von "Try ... Catch ... endlich" ist die "Catch" -Klausel. Die "Catch" -Klausel ist ein Codeblock, der nur ausgeführt wird, wenn eine Ausnahme in der "Versuch" -Klausel auftritt. Obwohl die Klausel "Catch" optional ist, ist es unmöglich, Ausnahmen ohne sie wirklich zu behandeln. Dies liegt daran, dass die "Catch" -Klausel verhindert, dass Ausnahmen sich im Anrufstapel ausbreiten und die Wiederherstellung der Programme ermöglichen. Wenn im "Try" -Block eine Ausnahme auftritt, wird die Kontrolle sofort an die "Catch" -Klausel übergeben. Die Ausnahme, die auftritt, wird auch zur Verarbeitung an den "Catch" -Block übergeben. Das folgende Beispiel zeigt, wie die Klausel "Catch" verwendet wird, um mit einem "ReferenzError" umzugehen. Beachten Sie, dass das "ReferenzError" -Objekt in der Klausel "Catch" durch die Variable "Ausnahme" verwendet werden kann.

<code class="language-javascript">var error = new Error("error message");</code>

komplexe Anwendungen können verschiedene Ausnahmen erzeugen. In diesem Fall kann der "Instanz" -Operator verwendet werden, um verschiedene Arten von Ausnahmen zu unterscheiden. Im folgenden Beispiel wird angenommen, dass die "Try" -Klausel verschiedene Arten von Ausnahmen erzeugen kann. Die entsprechende "Catch" -Klausel verwendet "Instanz", um die Ausnahmen von "TypeError" und "ReferenzError" getrennt von allen anderen Arten von Fehlern zu verarbeiten.

<code class="language-javascript">var pi = 3.14159;

pi.toFixed(100000);  // RangeError</code>

"Schließlich" Klausel

Die letzte Komponente der Anweisung "Try ... Catch ... endlich" ist die optionale Klausel "Endlich". Die "endgültige" Klausel ist ein Codeblock, der nach den Klauseln "Try" und "Catch" ausgeführt wird, unabhängig davon, ob ein Fehler auftritt. Die "endgültige" Klausel ist nützlich, um den Reinigungscode (Schließdateien usw.) aufzunehmen, der ohnehin ausgeführt werden muss. Beachten Sie, dass die Klausel "endgültig" ausgeführt wird, auch wenn eine ungewöhnliche Ausnahme auftritt. In diesem Fall wird die "endgültige" Klausel ausgeführt und die geworfene Ausnahme wird normal fortgesetzt.

Eine interessante Notiz über die Klausel "endgültig" ist, dass die "Versuch" oder "Catch" -Klausel die Anweisung "Rückgabe" ausführt, wird sie ausgeführt. Beispielsweise gibt die folgende Funktion false zurück, da die Klausel "endgültig" der letzte ausgeführte Inhalt ist.

<code class="language-javascript">function foo() {
  bar++;  // ReferenceError
}</code>

Top An einer Ausnahme

JavaScript ermöglicht es den Programmierern, ihre eigenen Ausnahmen durch Aussagen mit dem Namen "Throw" zu werfen. Dieses Konzept kann für unerfahrene Entwickler etwas verwirrend sein. Immerhin haben Entwickler Schwierigkeiten, Code ohne Fehler zu schreiben, aber die "Throw" -Anweisung führt absichtlich Fehler. Das Abwerfen von Ausnahmen kann jedoch den Code tatsächlich erleichtern, um zu debuggen und zu warten. Wenn Sie beispielsweise aussagekräftige Fehlermeldungen erstellen, ist es einfacher, Probleme zu identifizieren und zu beheben.

Folgende zeigt mehrere Beispiele für die Aussage "Wurf". Die Datentypen sind keine Begrenzung, die als Ausnahmen geworfen werden können. Es gibt auch keine Begrenzung für die Anzahl, mit der die gleichen Daten erfasst und geworfen werden können. Mit anderen Worten, eine Ausnahme kann geworfen, gefangen und dann wieder geworfen werden.

<code class="language-javascript">if (foo) {  // SyntaxError
  // 缺少右花括号
}</code>

Während die Anweisung "Throw" mit jedem Datentyp verwendet werden kann, hat die Verwendung integrierter Ausnahmetypen einige Vorteile. Beispielsweise ist Firefox auf diese Objekte spezialisiert, indem Debug -Informationen wie Dateinamen und Zeilennummern hinzugefügt werden, bei denen Ausnahmen auftreten.

Nehmen wir beispielsweise an, dass irgendwo in Ihrer Anwendung ein Teilungsbetrieb stattfindet. Da es möglicherweise eine Situation gibt, in der die Aufteilung durch Null auftritt, kann die Teilung problematisch sein. In JavaScript führen solche Operationen zu "Nan". Dies kann zu verwirrenden Ergebnissen führen, die schwer zu debuggen sind. Wenn sich die App lautstark über die Dividierung durch Null beschwert, ist die Situation viel einfacher. Die folgende "if" -serklärung macht dies durch eine Ausnahme.

<code class="language-javascript">var error = new Error("error message");</code>

kann es natürlich angemessener sein, "RangeError" zu verwenden, wie unten gezeigt:

<code class="language-javascript">var pi = 3.14159;

pi.toFixed(100000);  // RangeError</code>

benutzerdefiniertes Ausnahmeobjekt

Wir haben gerade gelernt, wie man benutzerdefinierte Fehlermeldungen mit integrierten Ausnahmetypen generiert. Eine andere Möglichkeit besteht jedoch darin, einen neuen Ausnahmetyp zu erstellen, indem der vorhandene "Fehler" -Typ erweitert wird. Da der neue Typ "Fehler" erbt, kann er wie andere integrierte Ausnahmetypen verwendet werden. Obwohl dieser Artikel keine Erbschaftsthemen in JavaScript erörtert, wird hier eine einfache Technik eingeführt.

Das folgende Beispiel kehrt zum Problem der Abwicklung der Abteilung um Null zurück. Anstatt das "Fehler" oder "RangeError" -Objekt wie zuvor zu verwenden, möchten wir unseren eigenen Ausnahmetyp erstellen. In diesem Beispiel erstellen wir den Ausnahmetyp "DivisionByzeroError". Die Funktion im Beispiel fungiert als Konstruktor unseres neuen Typs. Der Konstruktor ist dafür verantwortlich, die Attribute "Name" und "Nachricht" zugewiesen zu haben. Die letzten beiden Zeilen des Beispiels ermöglichen es dem neuen Typ, das "Fehler" -Objekt zu erben.

<code class="language-javascript">function foo() {
  bar++;  // ReferenceError
}</code>

Dinge, die Sie an

erinnern sollten
  • Die Aussage "Try ... Catch ... endlich" wird verwendet, um Ausnahmen zu behandeln.
  • "Try" -Klausel identifiziert den Code, der Ausnahmen erzeugen kann.
  • Die "Catch" -Klausel wird nur ausgeführt, wenn eine Ausnahme eintritt.
  • Die "endgültige" Klausel wird immer ausgeführt, egal was passiert.
  • Die "Wurf" -Anweisung wird verwendet, um eine Ausnahme zu generieren.
  • benutzerdefinierte Ausnahmeobjekte sollten vom vorhandenen "Fehler" -Typ erben.
  • Bilder aus Fotolien

JavaScript -Ausnahmehandling FAQ

Was ist der Unterschied zwischen Syntaxfehlern und Laufzeitfehlern in JavaScript?

Syntaxfehler, auch als Parsenfehler bezeichnet, treten zum Kompilieren in herkömmlichen Programmiersprachen und zur Interpretationszeit in JavaScript auf. Ein Syntaxfehler tritt auf, wenn der Code syntaktisch falsch ist und nicht analysiert werden kann. Wenn Sie beispielsweise die Schlusshalterung vergessen oder illegale Zeichen verwenden, tritt ein Syntaxfehler auf.

Andererseits tritt ein Laufzeitfehler während der Programmausführung nach erfolgreicher Zusammenstellung auf. Diese Fehler werden normalerweise durch illegale Operationen verursacht, die vom Code ausgeführt werden. Der Versuch, auf eine undefinierte Variable zuzugreifen oder eine nicht vorhandene Funktion aufzurufen, kann beispielsweise einen Laufzeitfehler verursachen.

Wie gehe ich mit Ausnahmen in JavaScript um?

JavaScript bietet einen Versuch… Catch -Anweisung, um Ausnahmen zu behandeln. Der Try -Block enthält Code, der möglicherweise Ausnahmen auslöst, während der Catch -Block Code enthält, der ausgeführt wird, wenn eine Ausnahme in den Try -Block geworfen wird. Hier ist ein einfaches Beispiel:

<code class="language-javascript">var error = new Error("error message");</code>

Was ist der Zweck des "endgültigen" Blocks in JavaScript?

Der "endgültige" Block in JavaScript wird verwendet, um Code nach dem Versuch auszuführen, unabhängig vom Ergebnis. Dies bedeutet, dass der Code im "endgültigen" Block unabhängig davon, ob die Ausnahme ausgelöst wird oder nicht, ausgeführt wird. Es wird normalerweise zum Aufräumen verwendet, nachdem der Code ausgeführt wurde, z. B. das Schließen von Dateien oder das Löschen von Ressourcen.

Kann ich meine eigene Ausnahme in JavaScript auswerfen?

Ja, JavaScript können Sie Ihre eigene Ausnahme mit der Anweisung "Throw" ausgeben. Sie können jede Art von Ausnahme, einschließlich Zeichenfolgen, Zahlen, booleschen Werten oder Objekten, auswerfen. Sobald eine Ausnahme ausgelöst ist, wird der normale Prozess des Programms gestoppt und die Kontrolle an den jüngsten Ausnahmebehandler übergeben.

Wie erstelle ich einen benutzerdefinierten Fehlertyp in JavaScript?

Mit

JavaScript können Sie benutzerdefinierte Fehlertypen erstellen, indem Sie das integrierte Fehlerobjekt erweitern. Dies ist nützlich, wenn Sie einen bestimmten Fehlertyp in Ihren Code werfen möchten. Hier ist ein Beispiel:

<code class="language-javascript">var pi = 3.14159;

pi.toFixed(100000);  // RangeError</code>

Was ist die Fehlerausbreitung in JavaScript?

Fehlerausbreitung bezieht sich auf den Prozess, einen Fehler zu übergeben, von dem er im Anrufstapel auf den nächsten Ausnahmebehandler geworfen wurde. Wenn in der Funktion, die den Fehler wirft, kein Fehler erfasst wird, wird er nach oben in die Aufruffunktion und so weiter verbreitet, bis er erfasst oder den globalen Bereich erreicht wird. An diesem Punkt wird das Programm beendet.

Wie protokolliere ich Fehler in JavaScript?

JavaScript liefert die Methode console.Error () zum Protokoll -Fehler. Diese Methode funktioniert genauso wie console.log (), enthält jedoch auch eine Stapelspur im Protokoll und zeigt die Nachricht als Fehler in der Konsole hervor. Hier ist ein Beispiel:

<code class="language-javascript">function foo() {
  bar++;  // ReferenceError
}</code>

Was ist der Unterschied zwischen "null" und "undefiniert" in JavaScript?

In JavaScript geben sowohl "Null" als auch "undefined" fehlende Werte an. Sie werden jedoch in leicht unterschiedlichen Kontexten verwendet. "Undefiniert" bedeutet, dass eine Variable deklariert wurde, aber kein Wert zugewiesen wurde. "Null" hingegen ist ein Zuordnungswert, der keinen Wert oder kein Objekt angibt.

Wie gehe ich in JavaScript mit asynchronen Fehlern um?

asynchrone Fehler können mit Versprechen oder Asynchronisation in JavaScript behandelt werden. Promise hat eine "Catch" -Methode, die aufgerufen wird, wenn Versprechen abgelehnt wird. Mit Async/Awit können Sie den Try/Catch -Block genauso wie mit Synchroncode verwenden. Hier ist ein Beispiel mit Async/Warte:

<code class="language-javascript">if (foo) {  // SyntaxError
  // 缺少右花括号
}</code>

Was ist TypenError in JavaScript?

Wenn die Operation nicht ausgeführt werden kann, wird normalerweise ein Typeerror in JavaScript geworfen, wenn der Wert nicht der erwartete Typ ist. Beispielsweise führt der Versuch, eine Nicht-Funktion aufzurufen oder auf eine undefinierte Eigenschaft zuzugreifen, zu einem TypenError.

Das obige ist der detaillierte Inhalt vonAußergewöhnliche Ausnahmeregelung in JavaScript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn