Error.isError()
Eingeschränkt verfügbar
Diese Funktion ist nicht Baseline, da sie in einigen der am weitesten verbreiteten Browser nicht funktioniert.
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. Dies erfolgt durch einen gebrandeten Check für ein privates Feld, das durch den Error()-Konstruktor initialisiert wurde. 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 falsche Positiv- und Negativmeldungen vermeidet:
Error.isError()lehnt Werte ab, die keine tatsächlichenError-Instanzen sind, selbst wenn sieError.prototypein ihrer Prototypenkette haben —instanceof Errorwürde diese akzeptieren, da es die Prototypenkette überprüft.Error.isError()akzeptiertError-Objekte, die in einem anderen Realm konstruiert wurden —instanceof Errorgibtfalseaus, da die Identität desError-Konstruktors zwischen Realms unterschiedlich ist.
Error.isError() gibt true für DOMException-Instanzen zurück. Dies liegt daran, dass DOMException, obwohl es nicht als echte Unterklasse von Error spezifiziert ist (der Error-Konstruktor ist nicht der Prototyp des DOMException-Konstruktors), für alle gebrandeten Prüfzwecke immer noch 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 field
// initialized by the Error constructor
Error.isError({ __proto__: Error.prototype });
instanceof vs. Error.isError()
Wenn eine Error-Instanz überprüft wird, ist Error.isError() gegenüber instanceof vorzuziehen, 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
Normalisierung gefangener Fehler
Sie können Error.isError() verwenden, um zu erkennen, ob der gefangene Wert ein Fehler ist und ihn zu einem Fehlerobjekt 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
| Spezifikation |
|---|
| ECMAScript® 2026 Language Specification> # sec-error.iserror> |