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

js
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 geschieht durch eine gekennzeichnete Prüfung für eine private Eigenschaft, die durch den Konstruktor Error() initialisiert wird. Dies ist derselbe Mechanismus, der von Array.isArray() verwendet wird, was wiederum dem Mechanismus ähnlich ist, der vom in-Operator verwendet wird.

Es ist eine robustere Alternative zu instanceof Error, da es falsche Positiva und falsche Negative vermeidet:

  • Error.isError() lehnt Werte ab, die keine tatsächlichen Error-Instanzen sind, selbst wenn sie Error.prototype in ihrer Prototypenkette haben — instanceof Error würde diese akzeptieren, da es die Prototypenkette überprüft.
  • Error.isError() akzeptiert Error-Objekte, die in einem anderen Realm erstellt wurden — instanceof Error gibt für diese Werte false zurück, da die Identität des Error-Konstruktors über Realms hinweg unterschiedlich ist.

Error.isError() gibt true für DOMException-Instanzen zurück. Dies liegt daran, dass, obwohl DOMException nicht als echte Unterklasse von Error angegeben ist (der Error-Konstruktor nicht das Prototyp des DOMException-Konstruktors ist), DOMException für alle gekennzeichneten Prüfungszwecke wie Error agiert.

Beispiele

Verwendung von Error.isError()

js
// 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 eine Error-Instanz wird Error.isError() gegenüber instanceof bevorzugt, da es über Realms hinweg funktioniert.

js
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 abgefangener Fehler

Sie können Error.isError() verwenden, um zu erkennen, ob der abgefangene Wert ein Fehler ist und ihn in ein Fehlerobjekt zu normalisieren.

js
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

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch