相同点

  1. 都是循环遍历数组中的每一项

  2. 参数是一个匿名函数,匿名函数(箭头函数)的参数有三个。item,index,arr(原数组)。

  3. 匿名函数中的this都是指向window

  4. 只能遍历数组

不同点

  1. map()会分配内存空间存储新数组并返回,forEach不会返回数组。forEach没有返回值。也可以理解成:forEach() 的返回值是 undefined。
let tempArry = myArr.forEach() 这种方式接收是没有意义的。

let newarr = arr.map((item,index,arr)=>{ return ...})  这种是可以的。
  1. forEach不能改变数组本身,无论是基础数据类型还是引用数据类型都不可以。

  2. 如果只是需要遍历出来打印值来看,就用forEach() 。所以,最好不要尝试用forEach 来改变数组的值,用for循环都比它好使。要在forEach里面改变数组,需要用array[index]的方法来改变数组本身。

  3. 推荐使用 map() 。使用场景:map()适用于你要改变数据值的时候。不仅仅在于它更快,而且返回一个新的数组。一定要return

    alt

    如果数组的值为空;打印出来是empty!

    map() 不会对空数组进行检测,并且不会改变原始数组

    alt

    alt