首页 > 技术文章 > forEach到底能不能改变原数组

wang--chao 2022-03-28 10:37 原文

平常使用forEach我一直以为是可以修改原数组的,今天有一组普通数组类型的使用forEach来改变它的值,但是一直改变不了,我就觉得很奇怪,之前一直是这样用的,后来查找原因,发现之前可以改成功是因为操作的都是对象数组,而这一次是普通类型的数组。

  • 基本类型的数据,是改不动的
  • 引用数据类型的是可以更改的
  • 也不能改变整个引用数据的值

相当于把原数组拷贝出来,对拷贝出来的数据进行操作,因为基本类型的数据相当于深拷贝,引用数据是浅拷贝,所以可以改变引用数据的值

专业的概念说就是:JavaScript是有基本数据类型与引用数据类型之分的。对于基本数据类型:number,string,Boolean,null,undefined它们在栈内存中直接存储变量与值。而Object对象的真正的数据是保存在堆内存,栈内只保存了对象的变量以及对应的堆的地址,所以操作Object其实就是直接操作了原数组对象本身。

forEach 的基本原理也是for循环,使用arr[index]的形式赋值改变,无论什么就都可以改变了,使用for循环就不会出现改变不了的情况。

推荐阅读