数组循环
数组循环方法:for循环,forEach(),for/in
一、for循环
1.使用Object.keys()参数为对象,返回一个数组,为对象属性名的集合(不可枚举的除外)。IE8+,然后使用for循环得到对象的值的集合。

var o={a:1,b:2,c:3};
Object.defineProperty(o,"c",{ //使o中的属性c不可枚举
   enumerable:false
});
var keys=Object.keys(o);//得到o中的属性名的集合,keys为一个数组,不可枚举的不能遍历
var arr=[];
for(var i=0,len=keys.length;i<len;i++){
   arr.push(o[keys[i]]);
}
arr;//1,2  得到o中可枚举的属性的值的集合

2.过滤数组中为undefined,null,NaN,"",false,和不存在的元素(稀疏数组中有不存在的元素)

var arr=[1,2,3,,undefined,null,"",false,NaN];
var p=[];
for(var i=0,len=arr.length;i<len;i++){
   if(!arr[i]) continue;
   p.push(arr[i]);
}
p;//1,2,3

3.在稀疏数组中过滤掉不存在的元素

var arr=[undefined,1,2,3,,null,"",false,NaN];
var p=[];
for(var i=0,len=arr.length;i<len;i++){
   if(arr[i]===undefined && !(i in arr)) continue;
   p.push(arr[i]);
}
p;//undefined,1,2,3,null,"",false,NaN

4.在数组中过滤null元素

var arr=[undefined,1,2,3,,"",null,false,NaN];
var p=[];
for(var i=0,len=arr.length;i<len;i++){
   if(arr[i]===null) continue;
   p.push(arr[i]);
}
p;//undefined,1,2,3,,"",false,NaN

5.在数组中过滤为undefined的元素

var arr=[undefined,1,2,3,,"",null,false,NaN];
var p=[];
for(var i=0,len=arr.length;i<len;i++){
   if(arr[i]===undefined) continue;
   p.push(arr[i]);
}
p;//1,2,3,"",null,false,NaN

二、for/in
1.使用for/in过滤掉不可枚举的元素


var arr=[1,2,3,4];
var p=[];
Object.defineProperty(arr,"3",{ //使索引为3,即属性名为"3"不可枚举
   enumerable:false
});
for(var i in arr){
   p.push(arr[i]);
}
p;//1,2,3

1.使用for/in枚举属性

Array.prototype.run=function(){  //run()返回实例数组索引为0的元素
   return this["0"];
};
var arr=[1,2,3];
var p=[];
for(var i in arr){
   p.push(i);
}
p;//0,1,2,3  这里0,1,2,3是arr里的索引,arr被枚举了4个元素包括继承属性run

1.使用for/in过滤继承属性

Array.prototype.run=function(){  //run()返回实例数组索引为0的元素
   return this["0"];
};
var arr=[1,2,3];
var p=[];
for(var i in arr){
   if(!arr.hasOwnProperty(i)) continue;
   p.push(i);
}
p;//0,1,2只枚举了3个属性,过滤了继承属性run

三、forEach()遍历,IE8+

var arr=[1,2,3,4];
var toal=0;
arr.forEach(function(x){
    toal+=x;
});
toal;//10

君莫言
21 声望9 粉丝

做人如果没梦想,跟咸鱼有什么分别?