Error.isError()
Eingeschränkt verfügbar
Diese Funktion ist nicht Baseline, da sie in einigen der am weitesten verbreiteten Browser nicht funktioniert.
Want more browser support for this feature? Tell us why.
Die statische Methode Error.isError() bestimmt, ob der übergebene Wert ein Error ist.
Syntax
Error.isError(value)
Parameter
value-
Der zu überprüfende Wert.
Rückgabewert
true, wenn value ein Error ist; andernfalls false.
Beschreibung
Error.isError() prüft, ob der übergebene Wert ein Error ist. Dazu führt die Methode eine Branded-Prüfung für ein privates Feld durch, das vom Error()-Konstruktor initialisiert wird.
Dies ist derselbe Mechanismus, den Array.isArray() verwendet. Er ähnelt wiederum dem Mechanismus des Operators in.
Die Methode ist eine zuverlässigere Alternative zu instanceof Error, da sie falsch positive und falsch negative Ergebnisse vermeidet:
Error.isError()weist Werte zurück, die keine tatsächlichenError-Instanzen sind, selbst wenn ihre PrototypketteError.prototypeenthält.instanceof Errorwürde diese Werte akzeptieren, da es die Prototypkette überprüft.Error.isError()akzeptiertError-Objekte, die in einem anderen Realm erstellt wurden.instanceof Errorgibt für diesefalsezurück, da derError-Konstruktor in verschiedenen Realms jeweils eine andere Identität hat.
Error.isError() gibt für Instanzen von DOMException true zurück. Obwohl DOMException nicht als echte Unterklasse von Error spezifiziert ist (der Error-Konstruktor ist nicht der Prototyp des DOMException-Konstruktors), verhält sich DOMException bei allen Branded-Prüfungen wie Error.
Beispiele
>Error.isError() verwenden
// all following calls return true
Error.isError(new Error());
Error.isError(new TypeError());
Error.isError(new DOMException());
try {
1 + 1n;
} catch (e) {
console.log(Error.isError(e)); // The operation threw a TypeError, so this returns true
}
// all following calls return false
Error.isError();
Error.isError({});
Error.isError(null);
Error.isError(undefined);
Error.isError(17);
Error.isError("Error");
Error.isError(true);
Error.isError(false);
// This is not an error, because the object does not have the private field
// initialized by the Error constructor
Error.isError({ __proto__: Error.prototype });
instanceof im Vergleich zu Error.isError()
Bei der Prüfung, ob ein Wert eine Error-Instanz ist, ist Error.isError() gegenüber instanceof vorzuziehen, da es Realm-übergreifend funktioniert.
const iframe = document.createElement("iframe");
document.body.appendChild(iframe);
const xError = window.frames[window.frames.length - 1].Error;
const error = new xError();
// Correctly checking for Error
Error.isError(error); // true
// The prototype of error is xError.prototype, which is a
// different object from Error.prototype
error instanceof Error; // false
Abgefangene Fehler normalisieren
Sie können mit Error.isError() feststellen, ob ein abgefangener Wert ein Fehler ist, und ihn in ein Fehlerobjekt umwandeln.
try {
throw "Oops; this is not an Error object";
} catch (e) {
if (!Error.isError(e)) {
e = new Error(e);
}
console.error(e.message);
}
Spezifikationen
| Spezifikation |
|---|
| ECMAScript® 2027 Language Specification> # sec-error.iserror> |