JavaScript Try ... Catch - Exceptions in JavaScript

Exceptions dienen der Reaktion auf aufgetretene und dem Auslösen von Ausnahmebehandlungen. Auf eine Exception kann reagiert werden, indem sie abgefangen (catch) wird. Im Catch-Bereich einer Ausnahmebehandlung wird auf den aufgetretenen Fehler reagiert, indem Aktionen ausgelöst werden, die den Zustand des Programms bereinigen. Auch werden hier oft Fehlermeldungen zur Information des Benutzers ausgegeben.

JavaScript Exception Beispiel 1: Ausnahmebehandlung in JavaScript

Folgendes Beispiel zeigt die Behandlung von Ausnahmen (exception handling) mit JavaScript. Die kritischen Aufrufe müssen hier innerhalb des Try-Blocks notiert werden. Im Beispiel wird der Zugriff auf eine nicht existierende Variable innerhalb von try gestartet. Das Ergebnis ist, dass eine Exception auftritt, auf die im Catch-Block entsprechend reagiert wird. Hier werden die Eigenschaften der Instanz des Exception-Objekts per write() ausgegeben. Hierzu bedient sich das Script der For-in-Schleife, die jede Eigenschaft der Instanz des Exception-Objekts durchgeht. Darauf folgt die Ausgabe von e, wobmit die Kurzform der Fehlermeldung ausgegeben werden kann. Auch hier kommt die Methode write des Document-Object zum Einsatz.

<script language="javascript" type="text/javascript">
<!-- // JavaScript-Bereich für ältere Browser auskommentieren
// Einleitung des Exception-Handlings mit dem Schlüsselwort try
try {
  // Versuch der Ausgabe einer nicht definierten Variablen
  // führt zu einem Fehler.
  document.write (t);
}
// Einleiten eines Blocks, der ausgeführt wird, wenn eine Exception
// auftritt.
catch (e) {
  // Alle Eigenschaften der Exception-Instanz ausgeben
  for (i in e)
    document.write (i + ': ' + e[i] + '<br>');
  // In Kurzform gibt Exception eine Fehlermeldung aus
  document.write ('Fehler: ' + e + '<br>');
}
// -->
</script>

JavaScript Exceptions Beispiel 2: Werfen / Auslösen einer Exception (throw)

Zur Fehlerbehandlung mit Exceptions ist es auch möglich, eigene Exceptions zu implementieren. Hierzu erstellt man eine Klasse, die nach Möglichkeit einen bezeichnenden Namen trägt und – damit erkennbar ist, dass es sich um eine Exception-Klasse handelt – auf Exception endet. Eben dies geschieht im unten gelisteten JavaScript-Code. Dort wird die Exception-Klasse ZeroDivException definiert welche, wird sie ohne Angabe einer Meldung an den Constructor aufgerufen, mit einer vorgegebenen Fehlermeldung eine Fehlerbeschreibung enthält. Wird im Constructor eine Fehlermeldung in Form eines nicht leeren Strings angegeben, so wird im Falle einer aufgetretenen Exception diesen Typs die angegebene Fehlermeldung ausgegeben.

Auf die Definition der Exception-Klasse folgt die Definition einer Funktion, deren Aufgabe es ist eine Division durchzuführen. Da Division durch Null nicht definiert ist, soll die Funktion eine Exception werfen (auslösen), wenn b – also der Divisor – gleich Null ist. Ansonsten gibt die Funktion das Ergebnis der Division zur&uum;ck. Im unteren Block des Scripts wird die neu definierte Exception dann auf die Probe gestellt.

<script language="javascript" type="text/javascript">
<!-- // JavaScript-Bereich für ältere Browser auskommentieren
// Eigene Exception-Klasse definieren
// Wird beim Aufruf des Construktors im ersten Parameter eine nicht leere Zeichenkette
// angegeben, so wird diese als Fehlermeldung der Instanz gespeichert.
function ZeroDivException (msg) {
  // Name der Exception
  this.name = 'ZeroDivException';
  // Fehlermeldung für die Exception
  // Wird eine individuelle Fehlermeldung in Form eines Strings als
  // Parameter des Constructors angegeben, so wird diese Fehlermeldung
  // in der Eigenschaft message gespeichert. Anstonsten wird eine
  // zur Exception passende Standardfehlermeldung gespeichert.
  this.message = msg === 'string' && msg.length != 0 ? msg : 'Division durch Null!';

  // Methode toString wird automatisch aufgerufen, wenn eine Ausgabeoperation
  // mit einer Variablen, die eine Instanz von ZeroDivException ist, getätigt
  // wird.
  this.toString = function () { return this.name + ': ' + this.message }
}

// Funktion dividiert a durch b und gibt das Ergebnis zurück
function div (a, b) {
  if (b == 0)
    // Division durch Null ist nicht definiert
    // Exception mit Standardmeldung auslösen
    throw new ZeroDivException ();
  // Operation durchführen und Ergebnis liefern
  return a / b;
}

// Try-Catch-Block zum Abfangen von Exceptions einleiten
try {
  // Folgender Aufruf ist noch korrekt
  document.write ('10 / 2 = ' + div (10, 2) + '<br>');
  // Der nächste führt zu einer Exception
  document.write ('5 / 0 = ' + div (5, 0) + '<br>');
} catch (e) {
  // Eine Exception ist aufgetreten und wir informieren
  // den Benutzer darüber mit einer Fehlermeldung
  document.write ('Exception aufgetreten: ' + e);
}
// -->
</script>



¬ Insolvenzrecht