玩壞腦袋的東西。
其實就跟在 從 Object 的等號來真正理解變數 提到的概念很類似。
Immutable 不可變
除了物件以外的資料型態都是屬於「immutable」,就是值沒辦法被改變。
例如說:
1 | var a = 'hello' |
這樣寫是絕對沒辦法改變 a
的值的。就跟你沒辦法在 function 裡面去改外面變數的值是一樣的道理。這個就叫做「不可變」。
所以你絕對不會看到用 String.method() Number.method() 就可以原變數的值的東西,而都是用回傳的方式來產生一個新的值。
Mutable 可變
只有物件,陣列是可以被改變的,關鍵字:「Mutator methods」
一個最常見的例子:
1 | var arr = [1, 2, 3] |
一個陣列使用 push
後原本的內容就會被改變。所以你不會用看到用第二行的寫法來,那樣子只會得到 push
執行完的回傳值(陣列的長度)。
其他還有像是 Array.splice
、Array.sort()
也都是一樣的例子。
讓一個物件變成不可變的方法
Object.freeze(obj)
可以讓一個物件或陣列變成 immutable:
1 | var arr = [1, 2, 3] |
如果你真的有這種要讓「物件」變成不可變的需求,可以使用這個內建方法。(但我目前也不知道有什麼情況會需要這樣做就是了)