forEach到底能不能改变原数组


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

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

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

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

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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM