程序开发中,存在大量的重复性操作或计算,这些动作必须依靠循环结构来完成。JavaScript 定义了 while、for 和 do/while 3 种类型循环语句。这几种循环都很常见了,这里说一种 for 循环的特殊形式 for/in。
for-in 语句是一种精准的迭代语句,可以用来枚举对象的属性。以下是 for-in 语句的语法:
for ([var] variable in <object | array>){
statement
}
variable 表示一个变量,可以在其前面附加 var 语句,用来直接声明变量名。in 关键字后面是一个对象或数组类型的表达式。
在运行该循环结构时,会声明一个变量,然后计算对象或数组类型的表达式,并遍历该对象或表达式。在遍历过程中,每获取一个对象或数组元素,就会临时把对象或数组中元素存储在variable指定的变量中。注意,对于数组来说,该变量存储的是数组元素的下标;而对于对象来说,该变量存储的是对象的属性名或方法名。
然后,执行 statement 包含的语句。执行完毕,返回继续枚举下一个元素,以此周而复始,直到对象或数组中所有元素都被枚举为止。
在循环体内还可以通过中括号([ ])和临时变量variable来读取每个对象属性或数组元素的值。
下面这个例子演示了如何利用 for/in 语句遍历数组,并读取枚举中临时变量和元素的值的方法:
var a = [1,2,3,4]; //声明并初始化数组变量
for(var b in a){ //遍历数组
alert(b); //显示枚举中临时变量值
alert(a[b]); //显示每个元素的值
}
使用 while 或 for 语句通过数组下标和 length 属性可以实现相同的枚举操作,不过 for/in 语句提供了一种更直观、高效的枚举对象属性或数组元素的方法。
数组迭代是一件很重要的操作,在 ECMAScript5 之前主要使用 for 语句实现,这种方式不是很方便,为此 ECMAScript5 新增了 5 个与迭代相关的方法:every、some、forEach、filter、map,感兴趣的同学可以了解一下:JavaScript 数组迭代