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

Jus*_*tin 4 javascript ecmascript-6

使用JavaScript ES6,我很惊讶:

const a = {};
a.foo = 'bar';
a.foo = 'car';
Run Code Online (Sandbox Code Playgroud)

已验证.为什么是这样?我会假设const你不能改变a空对象并应用新属性.更进一步,我也假设a一旦设置了属性,你就不能改变它的值.

Bli*_*ixt 11

只有变量赋值是常量.引用的任何对象或数组都是可变的.

const a = {one: 1};
a.three = 3; // this is ok.
a = {two: 2}; // this doesn't work.
Run Code Online (Sandbox Code Playgroud)

可以做的是使用Object.freeze:

const a = {one: 1};
Object.freeze(a);
a.three = 3; // silently fails.
// a is still {one: 1} here.
Run Code Online (Sandbox Code Playgroud)


Ama*_*dan 5

不,const a意味着您无法更改变量的值a.它的价值始终是同一个对象; 更改对象的属性不会使其成为不同的对象.

用一个比喻,我也一样Person是否amadan.jacket = null还是amadan.jacket = "Heavy Winter Jacket".amadan是不变的.

要使属性不可变,您要么必须通过显式读取属性writable: false,要么使用Object.freezeObject.seal(差异)使整个对象不可变.