因此,当我使用for..in循环迭代对象键时,我的IDE不喜欢。我收到警告:
可能对意外(自定义/继承)成员进行迭代,可能缺少hasOwnProperty检查
所以我得到了它的意思,所以在这种情况下,使用for (const key of Object.keys(obj))
而不是for (const key in obj)
之类的东西会更好吗?
两者之间是否有任何真正的差异,表现明智?
答案 0 :(得分:7)
通过{
"resultset": [
{
"title": "Google",
"CreationDate": "Mar 14, 2017 4:06:00 PM",
"location": "USA",
"path": "www.google.com",
"image": "www.google.com/images/logo.jpg"
},
{
"title": "Global",
"CreationDate": "Mar 14, 2017 4:06:00 PM",
"location": "Global",
"path": "www.abc.com",
"image": "www.abc.com/images/logo.jpg"
},
{
"title": "Yahoo",
"CreationDate": "Mar 14, 2017 4:06:00 PM",
"location": "Europe",
"path": "www.yahoo.com",
"image": "www.yahoo.com/images/logo.jpg"
},
{
"title": "Amazon",
"CreationDate": "Mar 14, 2017 4:06:00 PM",
"location": "Europe",
"path": "www.amazon.com",
"image": "www.amazon.com/images/logo.jpg"
},
{
"title": "XYZ",
"CreationDate": "Mar 14, 2017 4:06:00 PM",
"location": "Europe",
"path": "www.xyz.com",
"image": "www.xyz.com/images/logo.jpg"
}
]
}
数组循环和使用Object.keys
语句循环之间存在细微差别,这在大多数情况下都不会被注意到。 for...in
只返回一个具有该对象属性的数组,而Object.keys(obj)
也返回原型链中找到的键,以便后者对{{{{{{需要1}}然后是原型的原型,依此类推,直到整个原型链被访问。这肯定使第二种方法的效率低于第一种方法,但正如我已经提到的,在大多数情况下很难注意到这种差异。
对于更正式的方法,正如MDN中所述:
Object.keys()方法返回给定对象自己的数组 可枚举的属性,与a提供的顺序相同 for ... in循环(不同之处在于for-in循环枚举 原型链中的属性也是如此。
答案 1 :(得分:2)
您仍然可以使用for(var key in obj){}
。似乎在Object.hasOwnProperty
循环
for..in
这是因为for..in
也会看原型链&即使密钥在原型链中,它也会返回true。
而Object.hasOwnProperty
只有在密钥为owns
属性时才会返回true。
你可以这样做
for(var key in obj){
if(obj.hasOwnProperty(key){
// rest of code}
}