JavaScript中提供了两种方式迭代对象:
(1)for 循环;
(2)for..in循环;
使用for循环进行迭代数组对象
javascript提供了一种特殊的循环(也就是for .. in循环),用来迭代对象的属性或数组的每个元素,for...in循环中的循环计数器是字符串,而不是数字。它包含当前属性的名称或当前数组元素的索引。
案例一:
//使用for..in循环遍历对象属性
var person={
name: "Admin",
age: 21,
address:"shandong"
};
for(var i in person){
console.log(i);
}
执行结果为:
name
age
address
当遍历一个对象的时候,变量 i 也就是循环计数器 为 对象的属性名
//使用for..in循环遍历数组
var array = ["admin","manager","db"]
for(var i in array){
console.log(i);
}
执行结果:
0
1
2
当遍历一个数组的时候,变量 i 也就是循环计数器 为 当前数组元素的索引
for in的语法结构
for(variable in object)
statement
variable通常是一个变量名,也可以是一个可以产生左值的表达式或者一个通过var语句声明的变量,总之必须是一个适用于赋值表达式左侧的值。object是一个表达式,这个表达式的计算结果是一个对象。
执行for in语句的过程中,JS会先计算object表达式的值。
如果object是一个对象,JS会依次枚举对象的属性来执行循环。在每次循环之前,JS会先计算variable表达式的值,并将属性名(一个字符串)赋值给它。
如果表达式为null或者undefined,JS解释器会跳过循环并执行后续的代码。
variable的值可以当做赋值表达式的左值,它可以是任意表达式,每次循环都会计算这个表达式。例如,可以使用下面这段代码将所有对象的属性复制到一个数组中。
var p = {x:1, y:2, z:3}; var a = [], i = 0; for(a[i++] in p) <!-- empty -->
在上面代码后插入
for(i in a) console.log(i,a[i]);
显示的结果为0 x,1 y, 2 z
注意一:for in循环不会按照属性的下标来排列输出。http://www.cnblogs.com/rubylouvre/p/3396042.html 事实上,它不一定根据定义时的顺数输出,所有浏览器的最新版本现在都按chrome执行,先把当中的非负整数键提出来,排序好输出,然后将剩下的定义时的顺序输出。由于这个奇葩的设定,让avalon的ms-with对象排序不按预期输出了。只能强制用户不要以纯数字定义键名:
注意二:for/in循环并不会遍历对象的所有属性,只有可枚举的属性才会遍历到。JS语言核心所定义的内置方法和很多内置对象的属性都是不可枚举的。而代码中定义的所有属性和方法都是可枚举的。对象可以继承其他对象的属性,那些继承的自定义属性也可以使用for/in枚举出来。