版本

guard-for-in

要求 for-in 迴圈包含 if 語句

使用 for in 迴圈迭代物件會包含透過原型鏈繼承的屬性。此行為可能會導致您的 for 迴圈中出現非預期的項目。

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

對於不支援 ES2022 的程式碼庫,可以使用 Object.prototype.hasOwnProperty.call(foo, key) 作為檢查屬性是否未繼承的方法。

對於支援 ES2022 的程式碼庫,可以使用 Object.hasOwn(foo, key) 作為較短的替代方案;請參閱 prefer-object-has-own

請注意,僅檢查 foo.hasOwnProperty(key) 在某些情況下可能會導致錯誤;請參閱 no-prototype-builtins

規則詳細資訊

此規則旨在防止在不使用 if 語句過濾結果的情況下,使用 for in 迴圈可能產生的非預期行為。因此,當 for in 迴圈未使用 if 語句過濾結果時,它會發出警告。

此規則的錯誤程式碼範例

在遊樂場中開啟
/*eslint guard-for-in: "error"*/

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

此規則的正確程式碼範例

在遊樂場中開啟
/*eslint guard-for-in: "error"*/

for (key in foo) {
    if (Object.hasOwn(foo, key)) {
        doSomething(key);
    }
}

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

for (key in foo) {
    if ({}.hasOwnProperty.call(foo, key)) {
        doSomething(key);
    }
}

版本

此規則在 ESLint v0.0.6 中引入。

延伸閱讀

資源

變更語言