javascript中的for in循环

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);   
}
View Code

 



执行结果为:
name
age
address
当遍历一个对象的时候,变量 i 也就是循环计数器 为 对象的属性名

//使用for..in循环遍历数组

var array = ["admin","manager","db"]

for(var i in array){

    console.log(i);

}
View Code

 




执行结果:
0
1
2
当遍历一个数组的时候,变量 i 也就是循环计数器 为 当前数组元素的索引

for in的语法结构

for(variable in object)
    statement
View Code

 

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 -->
View Code

 

在上面代码后插入

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枚举出来。

posted @ 2016-08-30 22:29  浪浪的拐子  阅读(1430)  评论(0编辑  收藏  举报