平常使用forEach
我一直以為是可以修改原數組的,今天有一組普通數組類型的使用forEach來改變它的值,但是一直改變不了,我就覺得很奇怪,之前一直是這樣用的,后來查找原因,發現之前可以改成功是因為操作的都是對象數組,而這一次是普通類型的數組。
- 基本類型的數據,是改不動的
- 引用數據類型的是可以更改的
- 也不能改變整個引用數據的值
相當於把原數組拷貝出來,對拷貝出來的數據進行操作,因為基本類型的數據相當於深拷貝,引用數據是淺拷貝,所以可以改變引用數據的值
專業的概念說就是:JavaScript是有基本數據類型與引用數據類型之分的。對於基本數據類型:number,string,Boolean,null,undefined它們在棧內存中直接存儲變量與值。而Object對象的真正的數據是保存在堆內存,棧內只保存了對象的變量以及對應的堆的地址,所以操作Object其實就是直接操作了原數組對象本身。
forEach 的基本原理也是for循環,使用arr[index]的形式賦值改變,無論什么就都可以改變了,使用for循環就不會出現改變不了的情況。