关于forEach和map是否能改变原数组这件事

1,892 阅读1分钟

我们都知道forEachmap可以遍历数组,那么他们的区别在哪里呢?

最大的区别其实就是,一个有返回值一个没有返回值。那么他们遍历数组的时候是否可以改变数组内容呢?

先上结论:他们都可以改变数组内容。注意,这里说的是可以改变数组内容(并不是绝对的)。那么可以是什么意思呢?我们下面通过一个例子来说明。

forEach

当我们数组内存储的是对象类型的值时,遍历数组,对item进行操作,是会改变数组内的值的。

image.png

image.png

但是当我们数组内存储的是基本数据类型的值时,遍历数组对item进行操作,不会改变数组内的值。

image.png

image.png

map

让我们来看看map的表现如何

image.png

image.png

可以看到,如果数组中存储的是对象类型,并且在回调函数中对item进行了操作,也是会对原数组造成影响的。

总结

由上面两个例子得出,callback会传入对应数组的值,如果是引用数据类型,那么item保存的是这个引用数据类型的地址,对item进行修改会影响原数组的内容。

如果传入的是基本数据类型,那么就相当于是作了一个变量赋值,就是将item变量赋值为数组对应的基本数据类型的值,那么对item操作,不会影响到原来数组中的值。