guard-for-in

要求 for-in 循环包含 if 语句

使用 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);
}

f/g6SKVZdhoBiPVtnee0m+uPEv1T4kMgIaFUpxdtFwzAZHGBqJ5dJxRHxHHP/cP8

/*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);
    }
}