使用JavaScript ES6,我很惊讶:
const a = {};
a.foo = 'bar';
a.foo = 'car';
有效。为什么是这样?我原以为const
意味着您无法更改a
空对象并应用新属性。更进一步,我也假设一旦设置了a
属性,你就不能改变它的值。
答案 0 :(得分:9)
只有变量赋值是常量。引用的任何对象或数组都是可变的。
const a = {one: 1};
a.three = 3; // this is ok.
a = {two: 2}; // this doesn't work.
可以做的是使用Object.freeze
:
const a = {one: 1};
Object.freeze(a);
a.three = 3; // silently fails.
// a is still {one: 1} here.
答案 1 :(得分:5)
不,const a
表示您无法更改变量a
的值。它的价值始终是同一个对象;更改对象的属性不会使其成为不同的对象。
使用类比,我Person
或amadan.jacket = null
是amadan.jacket = "Heavy Winter Jacket"
。 amadan
是不变的。
要使属性不可变,您必须writable: false
明确地只读取属性,或者使用Object.freeze
或Object.seal
(differences)来制作整个属性对象不可变。