只遍历对象自身的和继承的可枚举的属性数组
Object.prototype.enumer=function(){ console.log("可枚举的"); } var obj={a:1,b:2}; for(var o in obj){ console.log(o); } // a // b // enumer //enumer是继承来的可枚举属性
for-in
遍历不能保证遍历顺序,而且若是数组原型上添加了属性,也会被遍历出来;在遍历数组时用for
方法,若是遍历对象用for-in
,再次建议相对for-in
来讲,它会遍历出继承来的可枚举对象,因此更建议使用Obect.keys()
方法函数
按照索引的顺序按个传递给定义的一个函数,而且能够在原数组的基础上进行修改spa
var arr=[1,2,4,5]; arr.forEach(function(x,i,a){ a[i] = x+1 }) ; // 其中调用函数中有三个参数,x 表示数组中元素,i 表示下标,a 表示数组自己
回调过空位,而且保留空位prototype
var arr=[1,2,,,3,4]; arr.forEach(function(x,i,a){ a[i] = x+1 }); arr; // [2, 3, , , 4, 5]
将调用的数组的每一个元素传递给指定的函数,并返回一个新数组,且函数必须有返回值code
var arr=[1,2,3]; arr.map(function(x){ return x * x; }); arr; // [1,4,9]
true
仍是false
,true
表示此数组元素被添加到返回数组(新数组)中,false 则相反;返回一个新数组(经过逻辑判断的),而且返回的是稠密的数组对象
[1,2,3].filter(function( x , i ,arr ){ return x<3; }); // [1,2] // 其中三个参数和forEach表示的同样;
filter()
会跳过稀疏数组中缺乏的元素,它的返回数组老是稠密的;用来压缩稀疏数组继承
var dense = sparse.filter(function(){ return true; });
压缩空缺并删除undefined和null元素:索引
a = a.filter(function(x){ return x !==undefined && x !=unll; });
二者都是经过对数组元素应用指定的函数进行断定,返回true
或者false
;原型
every()
当且仅当针对数组中的全部元素经过判断都是true
时,函数返回true
,若是有一个为false
,那么函数返回false
;some()
当数组中有一个元素经过判断是true
时,函数返回true
;若是要返回false
,必须全部元素都返回false
才能够;it
[1,3,5].every(function(x){ return x<8 ; }); // true 元素都返回true [1,2,4].some(function(x){ return 4 % 4 === 0; }) // true 有一个元素返回true
every()
返回true
,some()
返回 false
;第一个参数是执行化简的函数(化简函数就是用某种方法把两个值组合或化简为一个值,并返回化简后的值),第二个参数是一个传递给函数的初始值;
var arr=[1,2,4]; var brr=arr.reduce(function(res,x,i,arr){ // 其中 res 表示每次化简后的值,x 表示数组元素,i 表示数组下标,arr 表示数组自己 return res + x; },1); brr; // 8
其中1是初始值,初始值存在的时候,res首先赋初始值,x
赋数组第一个元素,进行运算以后,res
赋返回的值,x
赋数组的第二个元素 ......,若是初始值不存在,那么res
,x
分别赋数组第一个和第二个元素,以此类推 ......;
在空数组中,不带初始值参数调用reduce
将会报错
var arr=[]; var brr=arr.reduce(function(res,x){ return res+x; }); // TypeError: Reduce of empty array with no initial value
reduce
只会返回那个值,不会调用化简函数;reduce
同样,不一样的是它按照数组索引从高到低(从左到右)处理数组暂无