Immutable

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

JavaScript中,原始值是不可变的——一旦创建了原始值,就无法更改它,尽管保存它的变量可能会重新分配另一个值。相反,对象数组默认情况下是可变的——它们的属性和元素可以在不重新分配新值的情况下更改。

出于以下几个原因,使用不可变对象可能会有益

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

请注意,您可以轻松地证明可变性:只要对象提供了一种更改其属性的方法,它就是可变的。另一方面,如果没有任何语言语义来确保不可变性,则很难证明——这是开发人员契约的问题。例如,Object.freeze()是 JavaScript 中使对象不可变的语言级方法。

另请参阅