报告未筛选的 for-in 循环。

使用这种结构导致不仅处理对象自身的属性,还会处理对象原型的属性。 在某些特定情况下可能出人意料,例如,在复制或修改所有属性的实用程序方法中 或者 Object 的原型可能被错误修改时。 例如,以下代码将打印 42myMethod:


Object.prototype.myMethod = function myMethod() {};
let a = { foo: 42 };
for (let i in a) {
  console.log(a[i]);
}

建议将整个循环替换为 Object.keys() 方法,或添加 hasOwnProperty() 检查。 应用快速修复后,代码如下所示:


for (let i in a) {
  if (a.hasOwnProperty(i)) {
    console.log(a[i]);
  }
}