有返回值,返回一個新的數組,每一個元素爲調用func的結果。數組
let list = [1, 2, 3, 4, 5]; let other = list.map((d, i) => { return d * 2; }); console.log(other); // print: [2, 4, 6, 8, 10]
有返回值,返回一個符合func條件的元素數組數據結構
let list = [1, 2, 3, 4, 5]; let other = list.filter((d, i) => { return d % 2; }); console.log(other); // print: [1, 3, 5]
返回一個boolean,判斷是否有元素符合func條件,若是有一個元素符合func條件,則循環會終止。設計
let list = [1, 2, 3, 4, 5]; list.some((d, i) => { console.log(d, i); return d > 3; }); // print: 1,0 2,1 3,2 4,3 // return false
返回一個boolean,判斷每一個元素是否符合func條件,有一個元素不知足func條件,則循環終止,返回false。code
let list = [1, 2, 3, 4, 5]; list.every((d, i) => { console.log(d, i); return d < 3; }); // print: 1,0 2,1 3,2 // return false
沒有返回值,只針對每一個元素調用func。
優勢:代碼簡介。
缺點:沒法使用break,return等終止循環。對象
let list = [1, 2, 3, 4, 5]; let other = []; list.forEach((d, i) => { other.push(d * 2); }); console.log(other); // print: [2, 4, 6, 8, 10]
for-in循環實際是爲循環」enumerable「對象而設計的,for in也能夠循環數組,可是不推薦這樣使用,for–in是用來循環帶有字符串key的對象的方法。
缺點:只能得到對象的鍵名,不能直接獲取鍵值。索引
var obj = {a:1, b:2, c:3}; for (var prop in obj) { console.log("obj." + prop + " = " + obj[prop]); } // print: "obj.a = 1" "obj.b = 2" "obj.c = 3"
for of爲ES6提供,具備iterator接口,就能夠用for of循環遍歷它的成員。也就是說,for of循環內部調用的是數據結構的Symbol.iterator方法。
for of循環能夠使用的範圍包括數組、Set和Map結構、某些相似數組的對象(好比arguments對象、DOM NodeList對象)、後文的Generator對象,以及字符串。
有些數據結構是在現有數據結構的基礎上,計算生成的。好比,ES6的數組、Set、Map都部署瞭如下三個方法,調用後都返回遍歷器對象。接口
entries() 返回一個遍歷器對象,用來遍歷[鍵名, 鍵值]組成的數組。對於數組,鍵名就是索引值;對於Set,鍵名與鍵值相同。Map結構的iterator接口,默認就是調用entries方法。字符串
keys() 返回一個遍歷器對象,用來遍歷全部的鍵名。部署
values() 返回一個遍歷器對象,用來遍歷全部的鍵值。
這三個方法調用後生成的遍歷器對象,所遍歷的都是計算生成的數據結構。it
// 字符串 let str = "hello"; for (let s of str) { console.log(s); // h e l l o } // 遍歷數組 let list = [1, 2, 3, 4, 5]; for (let e of list) { console.log(e); } // print: 1 2 3 4 5 // 遍歷對象 obj = {a:1, b:2, c:3}; for (let key of Object.keys(obj)) { console.log(key, obj[key]); } // print: a 1 b 2 c 3 說明:對於普通的對象,for...in循環能夠遍歷鍵名,for...of循環會報錯。 一種解決方法是,使用Object.keys方法將對象的鍵名生成一個數組,而後遍歷這個數組。 // entries let arr = ['a', 'b', 'c']; for (let pair of arr.entries()) { console.log(pair); } // [0, 'a'] // [1, 'b'] // [2, 'c']