for..in或for..of对象键

时间:2017-04-17 06:23:58

标签: javascript object for-loop for-in-loop for-of-loop

因此,当我使用for..in循环迭代对象键时,我的IDE不喜欢。我收到警告:

  

可能对意外(自定义/继承)成员进行迭代,可能缺少hasOwnProperty检查

所以我得到了它的意思,所以在这种情况下,使用for (const key of Object.keys(obj))而不是for (const key in obj)之类的东西会更好吗?

两者之间是否有任何真正的差异,表现明智?

2 个答案:

答案 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}
}