不可變
不可變值是指其內容在不建立全新值的情況下無法更改的值,與可變值相對。
在JavaScript中,原始值是不可變的——一旦建立了原始值,就無法更改它,儘管持有它的變數可以被重新賦值為另一個值。相比之下,物件和陣列預設是可變的——它們的屬性和元素可以在不重新賦值新值的情況下被更改。
出於多種原因,使用不可變物件可能是有益的:
- 提高效能(無需為物件的未來更改做計劃)
- 減少記憶體使用(建立物件引用而不是克隆整個物件)
- 執行緒安全(多個執行緒可以引用同一個物件而不會相互干擾)
- 降低開發者的心智負擔(物件的狀態不會改變,其行為始終一致)
請注意,您可以輕鬆證明可變性:只要一個物件提供了更改其屬性的某種方式,它就是可變的。另一方面,如果不存在可以保障它的語言語義,不可變性就很難證明——這是一種開發者約定。例如,Object.freeze() 是 JavaScript 中使物件不可變的一種語言層面的方法。
另見
- 維基百科上的不可變物件
- 相關詞彙表術語