guard-for-in
Require for-in
loops to include an if
statement
用 for in
循环遍历对象将包括通过原型链继承的属性。这种行为会导致你的 for 循环中出现意外的项目。
for (key in foo) {
doSomething(key);
}
注意,简单地检查 foo.hasOwnProperty(key)
在某些情况下可能会导致错误;见 no-prototype-builtins。
规则细节
这条规则的目的是防止因使用 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.prototype.hasOwnProperty.call(foo, key)) {
doSomething(key);
}
}
for (key in foo) {
if ({}.hasOwnProperty.call(foo, key)) {
doSomething(key);
}
}
Related Rules
Version
This rule was introduced in ESLint v0.0.6.
Further Reading
