在js中一般使用的循环有两种:
1.常规的for(var i=0;i<length;i++)
2.for-in:for(var item in list)
3.for of
描述
对应于一个对象的每个属性,或一个数组的每个元素,执行一个或多个语句。
语法
for (variable in [object | array])
statement
for 语句的语法组成如下:
部分 描述
variable 一个变量,它可以是 object 的任一属性或 array 的任一元素。
object, array 要在其上遍历的对象或数组。
statement 相对于 object 的每个属性或 array 的每个元素,都要被执行的语句。可以是复合语句。
说明
在循环的每次迭代前,variable 被赋予 object 的下一个属性或 array 的下一个元素。然后可以在循环内的任一语句中使用它,就好像正在使用 object 的该属性或 array 的该元素一样。
当在一个对象上迭代时,没有办法决定或控制把对象的成员赋给 variable 的次序。在数组内将按元素的次序执行迭代,也就是,0、1、2、……
下面示例说明了 for ... in 语句的用法,它把一个对象用作一个联合数组:
function ForInDemo()
{
// 创建某些变量。
var a, key, s = "";
// 初始化对象。
a = {"a" : "Athens" , "b" : "Belgrade", "c" : "Cairo"}
// 迭代属性。
for (key in a)
{
s += a[key] + "<BR>";
}
return(s);
}
注意 使用 enumerator 对象来迭代集合的成员,for … in循环由于历史遗留问题,它遍历的实际上是对象的属性名称。一个Array数组实际上也是一个对象,它的每个元素的索引被视为一个属性。
for … of循环是ES6引入的新的语法,用for … of循环遍历集合,用法如下:
var a = ['A', 'B', 'C'];
var s = new Set(['A', 'B', 'C']);
var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);
for (var x of a)
{ 遍历Array alert(x);'A', 'B', 'C' }
for (var x of s)
{ 遍历Set alert(x);A', 'B', 'C' }
for (var x of m)
{ 遍历Map alert(x[0] + '=' + x[1]);1='x',2='y',3='z' }
for … of循环则完全修复了这些问题,它只循环集合本身的元素