我們先來看兩者之間的相同之處
var arr = ['a','b','c','d']; arr.forEach(function(item,index,arr){ //item表示數組中的每一項,index標識當前項的下標,arr表示當前數組 console.log(item); console.log(index); console.log(arr); console.log(this); },123); //這里的123參數,表示函數中的this指向,可寫可不寫,如果不寫,則this指向window arr.map(function(item,index,arr){ //參數含義同forEach console.log(item); console.log(index); console.log(arr); console.log(this); },123);
運行之后,可以看出兩者參數沒有任何的區別,除此之外兩者之間還有一個特性,就是不能停止里面的遍歷,除非程序報錯,那么兩者之間的區別在那里呢???
在於返回值!!!
var a = arr.forEach(function(item,index,arr){ return 123 }); var b = arr.map(function(item,index,arr){ return 123 }); console.log(a); //undefined console.log(b); //[123,123,123,123]
我們可以利用map的這個特性做哪些事情呢,比如
var b = arr.map(function(item,index,arr){ return item+'a'; }); console.log(b); //["aa", "ba", "ca", "da"]
forEach是es3中推出的方法,map是es5中推出的方法,目前在ie的低版本中都還有一些兼容性問題。