Immutable
与可变值相比,**不可变**的值是指其内容无法在不创建全新值的情况下进行更改的值。
在JavaScript中,原始值是不可变的——一旦创建了原始值,就无法更改它,尽管保存它的变量可能会重新分配另一个值。相反,对象和数组默认情况下是可变的——它们的属性和元素可以在不重新分配新值的情况下更改。
出于以下几个原因,使用不可变对象可能会有益
- 提高性能(无需计划对象未来的更改)
- 减少内存使用(创建对象引用而不是克隆整个对象)
- 线程安全(多个线程可以引用同一个对象而不会互相干扰)
- 降低开发人员的心智负担(对象的状态不会改变,其行为始终一致)
请注意,您可以轻松地证明可变性:只要对象提供了一种更改其属性的方法,它就是可变的。另一方面,如果没有任何语言语义来确保不可变性,则很难证明——这是开发人员契约的问题。例如,Object.freeze()
是 JavaScript 中使对象不可变的语言级方法。