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()
prüft, ob der übergebene Wert ein Error
ist. Dies wird durch eine branded check für eine private Eigenschaft erreicht, die vom Error()
Konstruktor initialisiert wird. Dies ist derselbe Mechanismus, der von Array.isArray()
verwendet wird, welcher wiederum dem Mechanismus ähnlich ist, der vom in
Operator verwendet wird.
Es ist eine robustere Alternative zu instanceof Error
, da es falsch-positive und falsch-negative Ergebnisse vermeidet:
Error.isError()
lehnt Werte ab, die keine echtenError
-Instanzen sind, selbst wenn sieError.prototype
in ihrer Prototypenkette haben —instanceof Error
würde diese akzeptieren, da es die Prototypenkette überprüft.Error.isError()
akzeptiertError
-Objekte, die in einem anderen Bereich konstruiert wurden —instanceof Error
gibt für diesefalse
zurück, da die Identität desError
-Konstruktors in verschiedenen Bereichen unterschiedlich ist.
Error.isError()
gibt true
für DOMException
Instanzen zurück. Dies liegt daran, dass DOMException
zwar nicht als echte Unterklasse von Error
spezifiziert ist (der Error
-Konstruktor ist nicht das Prototyp des DOMException
-Konstruktors), DOMException
sich aber trotzdem für alle Zwecke des branded checking wie Error
verhält.
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 von Error
-Instanzen wird Error.isError()
gegenüber instanceof
bevorzugt, da es über Bereiche 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
Normalisierung gefangener Fehler
Sie können Error.isError()
verwenden, um zu erkennen, ob der gefangene Wert ein Fehler ist, und ihn in ein Fehlerobjekt 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 |