維持 React 資料流可靠性的關鍵:immutable state
JavaScript 的資料型別
原始型別 primitive
- number
- string
- boolean
- null
- undefined
- symbol
- bigint
物件型別 object
除了原始型別外,其他的都是物件型別,包含:物件和陣列
原始型別與物件型別的差異
原始型別 | 物件型別 | |
---|---|---|
賦值 | 將值賦予至變數 | 將記憶體的位址賦予至變數 |
增加屬性 | 不可以 | 可以 |
mutable 與 immutable
immutable 不可變的
指的就是資料被建立後就不可以被事後修改。
原始型別的特性是 immutable,當值建立之後也會在記憶體中產生相對應的內容,而這個內容是不可以被修改的,所以當變數被重新賦值的時候,只能產生一個新的值取代舊的值,同時,變數會重新指向新的值。
原始型別的值被賦予給其他變數時,是將值複製一份給新的變數,所以當新的變數被修改時,不會影響到原本的變數。
mutable 可變的
物件型別在建立時會在記憶體中產生一個位址,變數就會指向這個位址 reference。
物件本身的屬性內容是可以被修改的 mutable,對物件的屬性或是內容做修改的動作就是 mutate ,因為物件型別的資料是傳遞記憶體位址,所以當物件的內容被修改時,這個變數的 reference 並不會被修改,但是當物件型別被賦予給其他變數時,由於是將記憶體的位址複製一份給新的變數,所以當新的變數被修改時,會影響到原本的變數。