今天在用for in遍历的时候,编辑器突然抛出了错误:"The body of a for-in should be wrapped in an if statement to filter unwanted properties from the...",发生了什么??? 之前还一直用了,并没有出现这样的异常。

然后发现es-link开启了严谨模式,哎!辛亏之前遇到过这个问题,虽然没有总结,但是知道需要判断一下对象是否含有这个属性,就是这个原因导致,随手记录一下吧!——可能有小白遇到这个问题了呢。

解决办法:

理论就是上面说的:判断一下对象是否含有这个属性 然后在使用循环的子属性。如下:

for (let item in obj) {
  if (obj.hasOwnProperty(item)) { 
    console.log(item);
  }
}

但是,vue中直接使用 hasOwnProperty 会提示不安全,报错:Do not access Object.prototype method 'hasOwnProperty' from target object.

简单说还是不严谨,因为对象的方法可以重新定义修改。这样再使用就不安全了,所以建议使用以下方法:用Object的原型方法,如下:

for (let item in obj) {
  if (Object.prototype.hasOwnProperty.call(obj, item)) { 
    console.log(item);
  }
}

对就这样,用原型方法解决这个问题最稳妥!好久不写笔记了,突然不知道说点什么,继续深造吧!