不可变

不可变值是指其内容在不创建全新值的情况下无法更改的值,与可变值相对。

JavaScript中,原始值是不可变的——一旦创建了原始值,就无法更改它,尽管持有它的变量可以被重新赋值为另一个值。相比之下,对象数组默认是可变的——它们的属性和元素可以在不重新赋值新值的情况下被更改。

出于多种原因,使用不可变对象可能是有益的:

  • 提高性能(无需为对象的未来更改做计划)
  • 减少内存使用(创建对象引用而不是克隆整个对象)
  • 线程安全(多个线程可以引用同一个对象而不会相互干扰)
  • 降低开发者的心智负担(对象的状态不会改变,其行为始终一致)

请注意,您可以轻松证明可变性:只要一个对象提供了更改其属性的某种方式,它就是可变的。另一方面,如果不存在可以保障它的语言语义,不可变性就很难证明——这是一种开发者约定。例如,Object.freeze() 是 JavaScript 中使对象不可变的一种语言层面的方法。

另见