Signatur
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
"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();
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);
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();
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));
// Wichtig · Fallstricke
- Nicht
codeverwenden: Die numerische Eigenschaftcodeist veraltet und für neuere Fehler wie"NotAllowedError"oder"AbortError"teilweise0. Vergleiche immer übername. - Nicht nur auf
nameverlassen: Auch normaleError-Objekte haben einname(z. B."TypeError")."SyntaxError"kann sowohl eine JavaScript-SyntaxErrorals auch eineDOMExceptionsein – kombiniere bei Bedarf miterr 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 eineDOMExceptionmit Namen"AbortError".AbortSignal.timeout()liefert"TimeoutError". - In Node.js ist
DOMExceptionerst ab Version 17 global verfügbar.