只遍歷對象自身的和繼承的可枚舉的屬性數組
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
同樣,不一樣的是它按照數組索引從高到低(從左到右)處理數組暫無