Skip to content
← Back to rules

eslint/guard-for-in 风格

它的作用

要求 for-in 循环中包含一个 if 语句。

为什么这是不好的?

使用 for in 循环遍历对象时,会包含通过原型链继承的属性。如果在循环中没有对结果进行过滤,可能会导致循环中出现意外的项,进而引发不可预期的行为。

示例

此规则的错误代码示例:

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

此规则的正确代码示例:

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

如何使用

要通过配置文件或 CLI 启用此规则,可以使用:

json
{
  "rules": {
    "guard-for-in": "error"
  }
}
bash
oxlint --deny guard-for-in

参考资料