我们都知道forEach和map可以遍历数组,那么他们的区别在哪里呢?
最大的区别其实就是,一个有返回值一个没有返回值。那么他们遍历数组的时候是否可以改变数组内容呢?
先上结论:他们都可以改变数组内容。注意,这里说的是可以改变数组内容(并不是绝对的)。那么可以是什么意思呢?我们下面通过一个例子来说明。
forEach
当我们数组内存储的是对象类型的值时,遍历数组,对item进行操作,是会改变数组内的值的。
但是当我们数组内存储的是基本数据类型的值时,遍历数组对item进行操作,不会改变数组内的值。
map
让我们来看看map的表现如何
可以看到,如果数组中存储的是对象类型,并且在回调函数中对item进行了操作,也是会对原数组造成影响的。
总结
由上面两个例子得出,callback会传入对应数组的值,如果是引用数据类型,那么item保存的是这个引用数据类型的地址,对item进行修改会影响原数组的内容。
如果传入的是基本数据类型,那么就相当于是作了一个变量赋值,就是将item变量赋值为数组对应的基本数据类型的值,那么对item操作,不会影响到原来数组中的值。