相同点
-
都是循环遍历数组中的每一项
-
参数是一个匿名函数,匿名函数(箭头函数)的参数有三个。item,index,arr(原数组)。
-
匿名函数中的this都是指向window
-
只能遍历数组
不同点
- map()会分配内存空间存储新数组并返回,forEach不会返回数组。forEach没有返回值。也可以理解成:forEach() 的返回值是 undefined。
let tempArry = myArr.forEach() 这种方式接收是没有意义的。
let newarr = arr.map((item,index,arr)=>{ return ...}) 这种是可以的。
-
forEach不能改变数组本身,无论是基础数据类型还是引用数据类型都不可以。
-
如果只是需要遍历出来打印值来看,就用forEach() 。所以,最好不要尝试用forEach 来改变数组的值,用for循环都比它好使。要在forEach里面改变数组,需要用array[index]的方法来改变数组本身。
-
推荐使用 map() 。使用场景:map()适用于你要改变数据值的时候。不仅仅在于它更快,而且返回一个新的数组。一定要return
如果数组的值为空;打印出来是empty!
map() 不会对空数组进行检测,并且不会改变原始数组