JavaScript ES6`const a = {}`是可变的。为什么?

时间:2016-01-25 01:14:39

标签: javascript ecmascript-6

使用JavaScript ES6,我很惊讶:

const a = {};
a.foo = 'bar';
a.foo = 'car';

有效。为什么是这样?我原以为const意味着您无法更改a空对象并应用新属性。更进一步,我也假设一旦设置了a属性,你就不能改变它的值。

2 个答案:

答案 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的值。它的价值始终是同一个对象;更改对象的属性不会使其成为不同的对象。

使用类比,我Personamadan.jacket = nullamadan.jacket = "Heavy Winter Jacket"amadan是不变的。

要使属性不可变,您必须writable: false明确地只读取属性,或者使用Object.freezeObject.sealdifferences)来制作整个属性对象不可变。