Start · Sprachen · JavaScript · Referenz · DOMException.name

DOMException.name

Eigenschaft

Schreibgeschützte Eigenschaft, die den Fehlernamen einer <code>DOMException</code> als String liefert, z. B. <code>"AbortError"</code> oder <code>"NotFoundError"</code>.

seit JavaScript Baseline: alle Browser (Node.js 17+ als globales D Kategorie: webapi

Signatur

get DOMException.prototype.name

Beschreibung

Die Eigenschaft name einer DOMException enthält einen String, der die Art des Fehlers beschreibt. Beispiele dafür sind "AbortError", "NotAllowedError", "QuotaExceededError", "SecurityError", "InvalidStateError", "SyntaxError", "NotFoundError", "TimeoutError", "DataCloneError" oder "NetworkError".

In der Praxis ist name der empfohlene Weg, um DOM-Fehler zu unterscheiden. Die ältere Eigenschaft code (numerische Konstanten wie DOMException.ABORT_ERR) gilt als veraltet und ist für neuere Fehlernamen einfach 0. Wer z. B. einen abgebrochenen fetch()-Aufruf von einem echten Netzwerkfehler trennen will, prüft err.name === "AbortError".

Der Wert wird im Konstruktor new DOMException(message, name) festgelegt. Lässt man das zweite Argument weg, ist name "Error". Die Eigenschaft liegt als Getter auf dem Prototyp und kann nicht direkt überschrieben werden.

Rückgabewert

Typ
string
Beschreibung
Der Fehlername, z. B. "AbortError". Standardwert ist "Error", wenn im Konstruktor kein Name angegeben wurde.

Beispiele

Abgebrochenen fetch-Aufruf erkennen

const controller = new AbortController();

const load = async () => {
  try {
    const res = await fetch('https://example.com/daten.json', { signal: controller.signal });
    return await res.json();
  } catch (err) {
    if (err instanceof DOMException && err.name === 'AbortError') {
      console.log('Anfrage wurde abgebrochen.');
    } else {
      throw err;
    }
  }
};

load();
controller.abort();
Anfrage wurde abgebrochen.

Eigene DOMException mit Namen erzeugen

const e1 = new DOMException('Zeitlimit überschritten', 'TimeoutError');
console.log(e1.name, e1.message);

const e2 = new DOMException('Ohne Namen');
console.log(e2.name);
TimeoutError Zeitlimit überschritten Error

Fehler von Web-APIs per switch unterscheiden

const kameraStarten = async () => {
  try {
    return await navigator.mediaDevices.getUserMedia({ video: true });
  } catch (err) {
    switch (err.name) {
      case 'NotAllowedError':
        console.warn('Zugriff verweigert.');
        break;
      case 'NotFoundError':
        console.warn('Keine Kamera gefunden.');
        break;
      case 'NotReadableError':
        console.warn('Kamera wird bereits verwendet.');
        break;
      default:
        console.error('Unbekannter Fehler:', err.name);
    }
  }
};

kameraStarten();
Zugriff verweigert. (je nach Nutzerentscheidung)

Speicherplatz bei localStorage prüfen

const sicherSpeichern = (key, value) => {
  try {
    localStorage.setItem(key, value);
    return true;
  } catch (err) {
    if (err.name === 'QuotaExceededError') {
      console.warn('Speicher voll – alte Einträge werden gelöscht.');
      localStorage.clear();
    }
    return false;
  }
};

sicherSpeichern('cache', 'x'.repeat(10_000_000));
Speicher voll – alte Einträge werden gelöscht.

// Wichtig · Fallstricke

  • Nicht code verwenden: Die numerische Eigenschaft code ist veraltet und für neuere Fehler wie "NotAllowedError" oder "AbortError" teilweise 0. Vergleiche immer über name.
  • Nicht nur auf name verlassen: Auch normale Error-Objekte haben ein name (z. B. "TypeError"). "SyntaxError" kann sowohl eine JavaScript-SyntaxError als auch eine DOMException sein – kombiniere bei Bedarf mit err instanceof DOMException.
  • Browser-Unterschiede: Historisch haben Browser gelegentlich unterschiedliche Namen geliefert (etwa Firefox "NS_ERROR_DOM_QUOTA_REACHED" statt "QuotaExceededError" in alten Versionen). Moderne Browser halten sich an die WebIDL-Spezifikation.
  • AbortSignal.reason: Wird controller.abort(grund) mit eigenem Grund aufgerufen, ist der geworfene Fehler dieser Grund – nicht zwingend eine DOMException mit Namen "AbortError". AbortSignal.timeout() liefert "TimeoutError".
  • In Node.js ist DOMException erst ab Version 17 global verfügbar.