guard-for-in
要求 for-in
循环包含 if
语句
使用 for in
循环遍历对象将包含通过原型链继承的属性。这种行为可能导致循环中出现意外的项目。
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。
规则详情
此规则旨在防止在 for in
循环中不筛选结果的情况下使用 for in
循环可能引起的意外行为。因此,当 for in
循环未使用 if
语句筛选其结果时,它会发出警告。
此规则的错误代码示例
在 Playground 中打开
/*eslint guard-for-in: "error"*/
此规则的正确代码示例
在 Playground 中打开
/*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 中引入。
延伸阅读
