为什么 JavaScript 中对象 const 定义后可以更改?

AGa*_*yer 3 javascript constants

在 JavaScript 中:

const a = 6;
a = 2; // Error

const o = {};
o = 7; // Error
o.a = 5; // Good. Why?

const o = {a:1};
o.a = 2; // Good. Why?
Run Code Online (Sandbox Code Playgroud)

我发现人们有时会定义一个 const 对象,但后来会更改它的值。为什么 const 定义后可以更改?

Cer*_*nce 5

使用 声明的变量const意味着一件事独立变量名称以后不能重新分配=

相反,o.a = 5;不是重新分配变量名称 - 它改变了对象的内容,但它并没有改变变量o在内存中指向的内容。

要防止重新分配变量名称,请使用const. 为了防止对象发生突变是完全不同的事情 - 为此,您需要类似或使用immutable-jsObject.freeze操作对象。


Mat*_*t U 5

在第一种情况下,aconst并且不能被重新分配。在第二个和第三个中,对象oconst这样的,即对象不能被分配另一个值,但它的属性却不能const。请参阅此处:https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/const

const 声明创建对值的只读引用。这并不意味着它所保存的值是不可变的,只是变量标识符不能被重新分配。例如,在内容是对象的情况下,这意味着可以改变对象的内容(例如,其属性)。