このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。

View in English Always switch to English

Error.isError()

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

Error.isError() は静的メソッドで、渡された値が Error であるかどうかを判定します。

構文

js
Error.isError(value)

引数

value

チェックされる値です。

返値

valueError の場合、true を返します。それ以外の場合は false を返します。

解説

Error.isError() は、渡された値が Error であるかどうかを確認します。これは、Error() コンストラクターによって初期化されたプライベートフィールドに対する「ブランドチェック」を実行することで行われます。 これは Array.isArray() で使用されているのと同じ仕組みであり、さらに in 演算子で使用されている仕組みと類似しています。

これは、instanceof Error よりも堅牢な代替手段あり、誤検知や誤否認を回避することができます。

  • Error.isError() は、プロトタイプチェーンに Error.prototype が存在する場合でも、実際の Error インスタンスではない値を拒否します。instanceof Error はプロトタイプチェーンをチェックするため、これらの値を受け入れます。
  • Error.isError() は別の領域で構築された Error オブジェクトを受け入れます。 この場合、instanceof Errorfalse を返します。これは、Error コンストラクターの同一性が領域間で異なるためです。

Error.isError() は、DOMException インスタンスに対して true を返します。これは、DOMExceptionError の真のサブクラスとして指定されていないにもかかわらず(Error コンストラクタは DOMException コンストラクターのプロトタイプではない)、DOMException はすべてのブランドチェックの目的において Error と同様の振る舞いをするためです。

Error.isError() の使用

js
// 以下のものはすべて true を返す
Error.isError(new Error());
Error.isError(new TypeError());
Error.isError(new DOMException());
try {
  1 + 1n;
} catch (e) {
  console.log(Error.isError(e)); // この操作は TypeError を発生するので、true を返す
}

// 以下のものはすべて false を返す
Error.isError();
Error.isError({});
Error.isError(null);
Error.isError(undefined);
Error.isError(17);
Error.isError("Error");
Error.isError(true);
Error.isError(false);
// これはエラーではない。オブジェクトが Error コンストラクターによって
// 初期化されたプライベートフィールドを持たないため
Error.isError({ __proto__: Error.prototype });

instanceof と Error.isError()

Error インスタンスをチェックする際は、 Error.isError()instanceof よりも使用することを推奨します。これは領域を超えて動作するためです。

js
const iframe = document.createElement("iframe");
document.body.appendChild(iframe);
const xError = window.frames[window.frames.length - 1].Error;
const error = new xError();

// 正しく Error をチェックした
Error.isError(error); // true
// このエラーのプロトタイプは xError.prototype であり、
// Error.prototype とは異なるオブジェクトである
error instanceof Error; // false

捕捉されたエラーの正規化

Error.isError() を使用して、捕捉された値がエラーかどうかを検出し、エラーオブジェクトに正規化できます。

js
try {
  throw "おっと、これは Error オブジェクトではありません";
} catch (e) {
  if (!Error.isError(e)) {
    e = new Error(e);
  }
  console.error(e.message);
}

仕様書

Specification
ECMAScript® 2026 Language Specification
# sec-error.iserror

ブラウザーの互換性

関連情報