儘管在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