forEach是否改变原数组

321 阅读1分钟

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对原数组进行操作的时候,需要以引用访问的方式进行访问数据,才能直接修改原数组。