JavaScript可能的意外迭代
JavaScript Possible Iteration Over Unexpected
我有以下代码:
for (i in awards) {
if (awards[i] instanceof Array === false) {
console.log(awards[i]);
httpFactory.patch(awards[i], {"read": true}, false);
}
}
我的IDE显示了与上面代码相关的错误:
可能对意外(自定义/继承)成员进行迭代,可能缺少hasOwnProperty检查
在JavaScript中检查未筛选的in循环的任何实例。这个使用此构造会导致处理继承的或意外的属性。您需要使用hasOwnProperty()筛选自己的属性方法验证工作在JavaScript、html或jsp文件中。
你能更详细地解释一下这句话的意思吗?
IDE建议您添加一个测试:
if (awards.hasOwnProperty(i)) {
...
}
在CCD_ 1循环内。
我个人建议不要这样做,并在可能的情况下禁用警告。在大多数代码中根本不需要,在ES5代码中更不需要使用Object.defineProperty
安全地向对象添加不可枚举属性
只有当您不安全地向Object.prototype
添加了新的(可枚举的)属性时,才需要进行hasOwnProperty
检查,因此最简单的解决方案是不要这样做。
jQuery不执行这个测试——他们明确记录了如果Object.prototype
被不安全地修改,jQuery将中断。
当您对对象进行迭代时,它将迭代对象本身的属性和对象原型的属性。
因此,为了避免对原型进行迭代,建议使用hasOwnProperty方法,该方法只有在对象直接具有上述属性时才返回true。即,不在原型内
示例
for (var k in object) {
if (object.hasOwnProperty(k)) {
// do your computation here.
}
}
更多详细信息可以在这里找到
您还可以将循环重构为:
const keys = Object.keys(object);
for (const key of keys){
// do something with object[key];
}
此外,您还可以通过编写forEach循环来消除警告,从而获得更可读、更实用的方法:
Object.keys(object).forEach(key => {
// Do something with object[key]
});
您应该在这个循环的开头再添加一个条件
if (awards.hasOwnProperty(i))
相关文章:
- 如何在javascript中迭代数字列表
- JS:检查URL中的参数,然后迭代一个参数为var的函数
- 如何迭代Array.prototype函数
- 如何使用jquery迭代具有相同属性的html元素并查找onclick事件
- 在ejs-partial中对JSON对象进行迭代
- 如何在DataTables 2.1中迭代对象数组
- 使用递归属性迭代保留属性结构
- 正在停止.在jquery中的特定时间间隔内,每次迭代的每次执行
- 如果30秒未单击,请应用CSS一次,将其删除,然后重新迭代
- 主干-从模板中迭代的集合中获取特定的模型
- 创建一个方法,通过一个窗口进行迭代并获取Titanium中的所有控件
- 什么's是在javascript中迭代项的最佳方式
- 为什么这只是迭代 HTMLCollection 的奇怪元素
- 是否“;对于的“;循环迭代遵循JavaScript中的数组顺序
- Babel编译错误:找不到模块核心js/library/fn/get迭代器
- 在es6中,将带有回调的事件侦听器设置为可迭代的
- jQuery-迭代不正确?(太长,无法执行)
- 每个$.,循环获胜't逐个迭代HTML元素
- 如何在Jquery中迭代JSON数组
- JavaScript可能的意外迭代