不可变
不可变值是指其内容在不创建全新值的情况下无法更改的值,与可变值相对。
在JavaScript中,原始值是不可变的——一旦创建了原始值,就无法更改它,尽管持有它的变量可以被重新赋值为另一个值。相比之下,对象和数组默认是可变的——它们的属性和元素可以在不重新赋值新值的情况下被更改。
出于多种原因,使用不可变对象可能是有益的:
- 提高性能(无需为对象的未来更改做计划)
- 减少内存使用(创建对象引用而不是克隆整个对象)
- 线程安全(多个线程可以引用同一个对象而不会相互干扰)
- 降低开发者的心智负担(对象的状态不会改变,其行为始终一致)
请注意,您可以轻松证明可变性:只要一个对象提供了更改其属性的某种方式,它就是可变的。另一方面,如果不存在可以保障它的语言语义,不可变性就很难证明——这是一种开发者约定。例如,Object.freeze() 是 JavaScript 中使对象不可变的一种语言层面的方法。
另见
- 维基百科上的不可变对象
- 相关词汇表术语