使用for...in
迭代数组并不能保证顺序,但是ES6引入了一个新的构造for...of
。
我对for...of
实现的有限测试表明,它确实按照数组上的顺序迭代,但是这个属性有保证吗?
发布于 2015-04-06 20:43:03
我对
for...of
实现的有限测试表明,它在数组上是按顺序迭代的,但是这个属性有保证吗?
是。但是找到它有点复杂,因为for of
不只是迭代数组(就像for in
枚举对象一样)。相反,它一般地迭代所有可迭代对象--按照它们各自迭代器提供的顺序。
实际上,数组是可迭代的,当从它们获得迭代器时,它将是一个迭代器,它以数组中可以找到的所有元素的顺序产生数组的所有元素。您可以读取对象,它们基本上像for (var index=0; index<array.length; index++) yield array[index];
循环一样工作。
发布于 2015-04-07 10:25:20
按照ES6关于for..of的规范
for ( LeftHandSideExpression of AssignmentExpression ) Statement
如果LeftHandSideExpression要么是ObjectLiteral,要么是ArrayLiteral,如果LeftHandSideExpression匹配的词法令牌序列可以被解析,而没有使用AssignmentPattern作为目标符号的标记,那么将不应用以下规则。相反,使用了AssignmentPattern的早期错误规则。
根据此语法规则定义,当for..of循环是、数组、或对象文字时,将按照令牌的词法顺序执行该循环。
这是David Walsh http://davidwalsh.name/es6-generators提供的一个很好的博客链接,他用例子解释了for..of
循环如何使用迭代器工作。
https://stackoverflow.com/questions/29477973
复制相似问题