Skip to content
← Back to rules

eslint/prefer-object-has-own スタイル

🛠️ An auto-fix is available for this rule for some violations.

何を行うか

Object.prototype.hasOwnProperty.call() の使用を禁止し、Object.hasOwn() の使用を推奨する

なぜ問題か?

次のようなコードを書くことは非常に一般的です:

javascript
if (Object.prototype.hasOwnProperty.call(object, "foo")) {
  console.log("プロパティ foo が存在します");
}

この記法は、Object.prototype に定義されたメソッドが時折利用できない、または再定義されている場合があるため(no-prototype-builtins ルールを参照)、よく使われます。
ES2022 で導入された Object.hasOwn() は、Object.prototype.hasOwnProperty.call() の短い代替手段です:

javascript
if (Object.hasOwn(object, "foo")) {
  console.log("プロパティ foo が存在します");
}

このルールに対して 不正な コードの例:

js
Object.prototype.hasOwnProperty.call(obj, "a");
Object.hasOwnProperty.call(obj, "a");
({}).hasOwnProperty.call(obj, "a");
const hasProperty = Object.prototype.hasOwnProperty.call(object, property);

このルールに対して 正しい コードの例:

js
Object.hasOwn(obj, "a");
const hasProperty = Object.hasOwn(object, property);

使用方法

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

json
{
  "rules": {
    "prefer-object-has-own": "error"
  }
}
bash
oxlint --deny prefer-object-has-own

参照