尽管在ECMAScript 2015中无法分配const
,但如果该对象未被Object.freeze
冻结,则该对象可以被修改。我应该在ECMAScript 2015的常量上使用Object.freeze吗?
由于const
应该是不可变的,因此添加Object.freeze
来冻结对象会有意义吗?
大多数用例在声明后不需要内容可修改。我想到的一个例外是将class
分配给const
(例如const MyClass = class MyClass {}
),在这种情况下,将需要是可更改的(至少对于大多数用途)。
我不是在谈论ECMAScript 2015是否应该改变;我想知道在日常代码中是否应该使用Object.freeze
来代替const
。
例
const firstNames = ['John', 'Daisy'];
firstNames = [] // Fails silently
firstNames // => ['John', 'Daisy']
firstNames[0] = 'Replaced!'; // No error and it works!
firstNames // => ['Replaced!', 'Daisy']
与Object.freeze
const firstNames = Object.freeze(['John', 'Daisy']);
firstNames = [] // Throws an error
firstNames // => ['John', 'Daisy']
firstNames[0] = 'Replaced!'; // No error and it works!
firstNames // => ['Replaced!', 'Daisy']
是,冻结对象真的,真的** **应优化 - 这是一个你可以做的最简单的(至少在理论上)优化。 – Toothbrush