在js中for in的用法

来源:互联网 发布:nginx过滤url ip限制 编辑:程序博客网 时间:2024/05/13 06:50
for(var i=0;i<len;i++)这样的用法一般都可以用for in 来替代。
例如:
var a = ["a","b","c"];
for(var el in a){
 alert(a[el]);
}
这个就是穷举出a中的所有元素,当然上面这个例子是可以用
for(var i=0,len=a.length;i<len;i++){
 alert(a[i]);
}
这种方式进行循环列出的,不过有时候这种方式就不一定奏效了。
例如:
var a = {"first":1,"second":2,"third":3};
这个时候就只能用for in来穷举了。

一个对象是否可以进行for in穷举,我们可以通过propertyIsEnumerable属性来判断,说明如下:
propertyIsEnumerable 属性
返回 Boolean 值,指出所指定的属性是否为一个对象的一部分以及该属性是否是可列举的。
object.propertyIsEnumerable(proName)
参数
object
必选项。一个对象。
proName
必选项。一个属性名称的字符串值。
说明
如果 proName 存在于 object 中且可以使用一个 For…In 循环穷举出来,那么 propertyIsEnumerable 属性返回 true。如果 object 不具有所指定的属性或者所指定的属性不是可列举的,那么 propertyIsEnumerable 属性返回 false。典型地,预定义的属性不是可列举的,而用户定义的属性总是可列举的。
propertyIsEnumerable 属性不考虑原型链中的对象。

--------------------

javascript 中for in 和 for each in的用法和区别

 区别一: for in是javascript 1.0 中发布的。 for each in是作为E4X标准的一部分在javascript 1.6中发布的,而它不是ECMAScript标准的一部分。 这将意味着存在各种浏览器的兼容性问题。for each in,对很多浏览器都不支持的。例如是不支持IE6,IE7,IE8等浏览器的。 

 区别二: 

 例: 

 var 长方形= { 高:"15", 宽:"25" };  for (var i in 长方形){  alert( i + "," + 长方形[i] );  } 

结果依次是:  高,15  ;    宽,25 ;

 结果依次是: 高,15 ; 宽,25 ;  for each (var i in 长方形){  alert( i + "," + 长方形[i] );  } 

 结果依次是: 15, undefined ; 25, undefined;

 两种遍历方法的变量i的值是不一样的,for each in无法获得对象的属性名,只能获取到属性值。

 最后总结一下使用建议:

 (1)遍历普通数组,建议使用原生的遍历方法for,不要贪图方便,因为for in 和for each in均存在浏览器的兼容问题,不能保证它们对数组的遍历顺序(如果对顺序的不作要求的话,可以使用for in ,但本人不建议),有兴趣话,可以阅读《for in 的浏览器兼容问题》。

 (2)遍历对象,由于for没办法提供理想的遍历,因而只能选择其他方法。这里建议使用for in ,从上面讲解的区别,for in比for each 更具优势,for in能获取索引和属性值,而for each只能获取属性值,而且for each在很多低版本的浏览器是不支持。

来源: http://blog.sina.com.cn/s/blog_855dfd9e0101a2w0.html

0 0
原创粉丝点击