Skip to content
← Back to rules

eslint/guard-for-in スタイル

何ができるか

for-in ループに if 文を含むことを要求します。

なぜ悪いのか

for in ループでオブジェクトをループ処理すると、プロトタイプチェーンを通じて継承されたプロパティも含まれます。ループ内で結果をフィルタリングせずに for in ループを使用すると、予期しない項目がループ内に含まれる可能性があり、その結果、予期しない振る舞いを引き起こすことがあります。

このルールに対して誤りなコードの例:

javascript
for (key in foo) {
  doSomething(key);
}

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

javascript
for (key in foo) {
  if (Object.hasOwn(foo, key)) {
    doSomething(key);
  }
}
javascript
for (key in foo) {
  if (Object.prototype.hasOwnProperty.call(foo, key)) {
    doSomething(key);
  }
}
javascript
for (key in foo) {
  if ({}.hasOwnProperty.call(foo, key)) {
    doSomething(key);
  }
}

使い方

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

json
{
  "rules": {
    "guard-for-in": "error"
  }
}
bash
oxlint --deny guard-for-in

参照