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"*/
此規則的正確程式碼範例
在遊樂場中開啟
/*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 中引入。
延伸閱讀
