不可變

不可變值是指其內容在不建立全新值的情況下無法更改的值,與可變值相對。

JavaScript中,原始值是不可變的——一旦建立了原始值,就無法更改它,儘管持有它的變數可以被重新賦值為另一個值。相比之下,物件陣列預設是可變的——它們的屬性和元素可以在不重新賦值新值的情況下被更改。

出於多種原因,使用不可變物件可能是有益的:

  • 提高效能(無需為物件的未來更改做計劃)
  • 減少記憶體使用(建立物件引用而不是克隆整個物件)
  • 執行緒安全(多個執行緒可以引用同一個物件而不會相互干擾)
  • 降低開發者的心智負擔(物件的狀態不會改變,其行為始終一致)

請注意,您可以輕鬆證明可變性:只要一個物件提供了更改其屬性的某種方式,它就是可變的。另一方面,如果不存在可以保障它的語言語義,不可變性就很難證明——這是一種開發者約定。例如,Object.freeze() 是 JavaScript 中使物件不可變的一種語言層面的方法。

另見