JavaScript可能发生意外迭代

普罗米修斯:

我有以下代码:

  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文件。

您能否更详细地解释此声明的含义?

Alnitak:

IDE建议您添加一个测试:

if (awards.hasOwnProperty(i)) {
    ...
}

for循环内。

我个人建议不要这样做,并尽可能禁用警告。基本上,大多数代码都不需要,甚至在ES5代码中也不再需要,在这些代码中,您可以使用以下命令安全地向对象添加不可枚举的属性Object.defineProperty

hasOwnProperty仅当您不安全地向其中添加了新的(可枚举的)属性时Object.prototype才需要执行检查,因此最简单的解决方法是不要执行此操作

jQuery不会执行此测试-他们明确记录了如果Object.prototype不安全地修改jQuery将会破坏

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章