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