Error.isError()
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
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()
überprüft, ob der übergebene Wert ein Error
ist. Es erfolgt ein branded check für eine private Eigenschaft, die durch den Error()
-Konstruktor initialisiert wird. Dies ist derselbe Mechanismus, der von Array.isArray()
verwendet wird, was wiederum dem Mechanismus des in
-Operators ähnelt.
Es ist eine robustere Alternative zu instanceof Error
, da es falsche Positiv- und Negativmeldungen vermeidet:
Error.isError()
lehnt Werte ab, die keine echtenError
-Instanzen sind, selbst wenn sieError.prototype
in ihrer Prototypkette haben —instanceof Error
würde diese akzeptieren, da es die Prototypkette überprüft.Error.isError()
akzeptiertError
-Objekte, die in einem anderen Realm konstruiert wurden —instanceof Error
gibt für diesefalse
aus, da die Identität desError
-Konstruktors über Realms hinweg unterschiedlich ist.
Error.isError()
gibt true
für DOMException
-Instanzen aus. Dies liegt daran, dass, obwohl DOMException
nicht als echte Unterklasse von Error
spezifiziert ist (der Error
-Konstruktor ist nicht das Prototyp des DOMException
-Konstruktors), DOMException
für alle Zwecke der Branded-Überprüfung wie Error
funktioniert.
Beispiele
Verwendung von Error.isError()
// 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 property // initialized by the Error constructor Error.isError({ __proto__: Error.prototype });
instanceof vs. Error.isError()
Beim Überprüfen auf Error
-Instanzen wird Error.isError()
gegenüber instanceof
bevorzugt, da es über Realms hinweg 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
Normalisieren abgefangener Fehler
Sie können Error.isError()
verwenden, um zu erkennen, ob der abgefangene Wert ein Fehler ist und ihn zu einem Error-Objekt zu normalisieren.
try { throw "Oops; this is not an Error object"; } catch (e) { if (!Error.isError(e)) { e = new Error(e); } console.error(e.message); }
Spezifikationen
Specification |
---|
Error.isError # sec-error.iserror |