我有以下代码:
for (i in awards) {
if (awards[i] instanceof Array === false) {
console.log(awards[i]);
httpFactory.patch(awards[i], {"read": true}, false);
}
}
我的IDE显示与上述代码有关的错误:
可能对意外(自定义/继承)成员进行迭代,可能缺少hasOwnProperty检查
检查JavaScript中未过滤的for-in循环的任何实例。使用此构造会导致处理继承或意外的属性。您需要使用hasOwnProperty()方法过滤自己的属性。验证适用于JavaScript,html或jsp文件。
您能否更详细地解释此声明的含义?
IDE建议您添加一个测试:
if (awards.hasOwnProperty(i)) {
...
}
在for
循环内。
我个人建议不要这样做,并尽可能禁用警告。基本上,大多数代码都不需要,甚至在ES5代码中也不再需要,在这些代码中,您可以使用以下命令安全地向对象添加不可枚举的属性Object.defineProperty
hasOwnProperty
仅当您不安全地向其中添加了新的(可枚举的)属性时Object.prototype
,才需要执行此检查,因此最简单的解决方法是不要执行此操作。
jQuery不会执行此测试-他们明确记录了如果Object.prototype
不安全地修改jQuery将会破坏。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句