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