JavaScript语言中的`for of`语句得到了良好的支持吗?

20
var nameArray = [

{ name: 'john', surname: 'smith'  },
{ name: 'paul', surname: 'jones' },
{ name: 'timi', surname: 'abel' },

];  

for (str of nameArray) {    
   console.log( str.name );

}

我想知道在浏览器支持和移动JavaScript支持方面,for( item of array )有多少支持 - 我意识到你不能使用greater than >,这只是纯迭代?

我刚刚发现了这个,这是我所希望的一样好吗?


2
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of#Browser_compatibility - Bergi
2
http://kangax.github.io/compat-table/es6/#for..of_loops - kangax
投票关闭,原因是过于宽泛。 - Ciro Santilli OurBigBook.com
https://caniuse.com/#feat=mdn-javascript_statements_for_of - Skylar
4个回答

18

经典的做法如下:

  for(var i = 0; i < nameArray.length; i++){
    var str = nameArray[i];
  }
这将为您提供“foreach”循环的确切功能,我猜这才是您真正需要的。 这还可以让您在Internet Explorer中使用,具有额外的好处。 在MDN中还有关于该循环的详细了解。目前Android网页和其他一些方法似乎不支持它,因此请在该页面上检查兼容性列表; 未来发布的新JavaScript可能会在其中包含OOP。

4
我不明白“面向对象编程”与此有什么关系。 - user663031
嗯,在我看来,foreach循环更多地是面向对象语言的属性。此外,这有助于显示所提到的版本,我非常重视这种贡献。 - Gianthra
13
说“增强型for循环是面向对象语言的特性”是严重错误的。 - user663031
这是错误的。'For of' 比所示的 for 循环更可靠。JS 数组可能存在间隙和各种索引,这些索引不是数字且不按顺序排列。 - cskwg
为什么要谈论 Array.forEach() 循环? - Dan Froberg

9

MDN:

for...in循环遍历属性名,而for...of循环遍历属性值。

以上是for...of循环的作用。以下是它目前的状态。

这是一项实验性技术,属于Harmony(ECMAScript 6)提案的一部分。由于该技术规范尚未稳定,因此请在不同浏览器中检查兼容性表以了解其用法。还请注意,实验性技术的语法和行为可能会随着规范的变化在未来版本的浏览器中发生变化。


4

这是 ES6 for..of 循环。根据我刚刚链接的 MDN 文章,它受到多个浏览器的支持(请查看精确版本),但不支持 IE。目前,一些手机浏览器也支持它。


3

5
虽然使用for...in语句迭代数组元素似乎很诱人,但它将返回除数字索引外的用户定义属性名称。因此,当迭代数组时最好使用传统的for循环和数字索引,因为for...in语句会迭代用户定义属性以及数组元素。如果您修改了Array对象(例如添加自定义属性或方法),for...in语句将在迭代中包含这些自定义属性。 - viery365

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接