forEach
结论
- 当要改变的数组中的值为基础类型时,不会改变原数组
- 当要改变的数组中的值是引用类型时,会改变原数组
元素为基础类型
const arr = [1, 2, 3]
arr.forEach(item => item += 1)
console.log(arr);
元素为引用类型
const arr = [{ name: '张三' }, { name: '张三' }]
arr.forEach(item => item.name = '李四')
console.log(arr) //[ { name: '李四' }, { name: '李四' } ]原数组已经改变
为什么会这样呢
因为forEach根本不会操作原数组,而是复制了一下数组到一个新开辟的空间
- 对于简单数据类型
forEach操作的时原数组的副本,改变其值肯定不会影响原数组 - 对于引用数据类型
forEach虽是在新空间操作,但操作的是地址,地址指向仍是同一对象,改变值会影响原数组
总结
用forEach对原数组进行操作的时候,需要以引用访问的方式进行访问数据,才能直接修改原数组。