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

JavaScript ES6 `const a = {}` is mutable. Why?

本文关键字:为什么 ES6 const JavaScript      更新时间:2023-09-26

使用 JavaScript ES6,我很惊讶地发现:

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

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

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

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.

不,const a 表示您无法更改变量的值 a 。其值始终是相同的对象;更改对象的属性不会使其成为其他对象。

打个比方,无论是amadan.jacket = null还是amadan.jacket = "Heavy Winter Jacket",我都是一样的Person. amadan是恒定的。

要使属性不可变,您必须通过 writable: false 将属性显式设置为只读,或者使用 Object.freezeObject.seal(差异)使整个对象不可变。