Skip to content
← Back to rules

unicorn/no-instanceof-builtins 懸念

💡 A suggestion is available for this rule for some violations.

何をしますか

ECMAScript の組み込みコンストラクタに対して instanceof を使用することを禁止します。理由は以下の通りです:

  • 実行コンテキスト間で動作が破綻する(iframe、Web Worker、Node vm など);
  • 結果が誤解を招くことが多い(例:サブクラスでは instanceof Array が失敗する);
  • より明確で安全な代替手段がある(Array.isArraytypeofBuffer.isBuffer など)。

なぜこれは良くないですか?

instanceof は実行コンテキスト間で動作が破綻します(iframe、Web Worker、Node vm)。 また、サブクラスや特殊なオブジェクトに対して誤った結果を返す可能性があります。

このルールに違反する 不正な コードの例:

javascript
if (arr instanceof Array) { … }
if (el instanceof HTMLElement) { … }

このルールに準拠する 正しい コードの例:

javascript
if (Array.isArray(arr)) { … }
if (el?.nodeType === 1) { … }

設定

このルールは以下のプロパティを持つ設定オブジェクトを受け入れます。

exclude

type: string[]

default: []

チェックから除外するコンストラクタ名。

include

type: string[]

default: []

デフォルトセット以外にチェックする追加のコンストラクタ名。 このオプションを使用して、ルールを追加のコンストラクタで拡張できます。

strategy

type: "strict" | "loose"

default: "loose"

チェック対象となる組み込みコンストラクタを制御します。

  • "loose"(デフォルト):ArrayFunctionErroruseErrorIsErrortrue の場合)、およびプリミティブラッパーのみチェック
  • "strict"Error タイプ、コレクション、型付き配列、およびその他の組み込みコンストラクタも追加でチェック

useErrorIsError

type: boolean

default: false

true に設定すると、instanceof Error をチェックし、代わりに Error.isError() を使用するよう提案します。 これには Error.isError() 関数 が利用可能である必要があります。

使い方

設定ファイルまたは CLI でこのルールを 有効化 するには、次のようにします:

json
{
  "rules": {
    "unicorn/no-instanceof-builtins": "error"
  }
}
bash
oxlint --deny unicorn/no-instanceof-builtins

参照