Error.isError()
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
TheError.isError() static method determines whether the passed value is anError.
In this article
Syntax
Error.isError(value)Parameters
valueThe value to be checked.
Return value
true ifvalue is anError; otherwise,false.
Description
Error.isError() checks if the passed value is anError. It does so by performing abranded check for a private field initialized by theError() constructor.This is the same mechanism used byArray.isArray(), which is in turn similar to the mechanism used by thein operator.
It is a more robust alternative toinstanceof Error because it avoids false positives and false negatives:
Error.isError()rejects values that aren't actualErrorinstances, even if they haveError.prototypein their prototype chain —instanceof Errorwould accept these as it does check the prototype chain.Error.isError()acceptsErrorobjects constructed in another realm —instanceof Errorreturnsfalsefor these because the identity of theErrorconstructor is different across realms.
Error.isError() returnstrue forDOMException instances. This is because, althoughDOMException is not specified as a real subclass ofError (theError constructor is not the prototype of theDOMException constructor),DOMException still behaves likeError for all branded checking purposes.
Examples
>Using Error.isError()
// all following calls return trueError.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 falseError.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 constructorError.isError({ __proto__: Error.prototype });instanceof vs. Error.isError()
When checking forError instance,Error.isError() is preferred overinstanceof because it works across realms.
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 ErrorError.isError(error); // true// The prototype of error is xError.prototype, which is a// different object from Error.prototypeerror instanceof Error; // falseNormalizing caught errors
You can useError.isError() to detect if the caught value is an error and normalize it to an error object.
try { throw "Oops; this is not an Error object";} catch (e) { if (!Error.isError(e)) { e = new Error(e); } console.error(e.message);}Specifications
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-error.iserror> |