日期:2014-05-16  浏览次数:20318 次

javascript for in 数组遍历的问题

对于数组遍历,一般的做法是:

?

//新建数组  
var arr = new Array();  
arr.push("abc");  
arr.push("abc1");  
//对数组进行遍历  
for(var i = 0;i < arr.length; i++){  
     console.log(arr[i]);  
}  

?

?使用javascript的for in遍历数组

?

for(var i in arr){   
    console.log(i + "  " + arr[i]);
}
?

本该只有2项元素的数组,结果显示出来了4项,比我们预期多了两项indexOf和remove:

?

0  abc
1  abc1
indexOf  function(c){for(var b=0,a=this.length;b<a;b++){if(this[b]==c){return b}}return -1} 
remove  function(b){var a=this.indexOf(b);if(a!=-1){this.splice(a,1)}return this} 
?

这样就暴露出了for in 遍历数组的缺点,增强判断条件解决这个问题。

?

?

for ( var i in arr) {
	if (arr.hasOwnProperty(i)) {
		console.log(i + '' + arr[i]);
	}
}
?

这里用的的hasOwnProperty()函数方法是返回一个布尔值,指出一个对象是否具有指定名称的属性。

此方法无法检查该对象的原型链中是否具有该属性;该属性必须是对象本身的一个成员。

?

?