Javascript 用常量声明对象的Wiered行为

Javascript 用常量声明对象的Wiered行为,javascript,constants,Javascript,Constants,我一直在做一些关于let和const的练习,发现了一些关于const以及对象分配的有趣内容 根据定义:在JavaScript中,const表示不能重新分配标识符 constnumconst=20; numConst=40; log(“numConst”,numConst)const对于对象的行为不同,因为当您创建以下内容时: const person = {name:"test",age:20}; 在这里,person在其中保存引用(内存地址),当您更改对象中的某些数据时

我一直在做一些关于
let
const
的练习,发现了一些关于
const
以及对象分配的有趣内容

根据定义:在JavaScript中,
const
表示不能重新分配标识符

constnumconst=20;
numConst=40;

log(“numConst”,numConst)
const
对于
对象
的行为不同,因为当您创建以下内容时:

const person = {name:"test",age:20};
在这里,person在其中保存引用(内存地址),当您更改对象中的某些数据时,其引用不会更改,但更改了
键:值
对,这就是它在对象情况下不显示错误的原因。

关键字const有点误导人

它不定义常量值。它定义了对值的常量引用

因此,我们无法更改常量基本体值,但可以更改常量对象的属性

const a={foo:'bar'}定义一个新对象(因此是一个新引用)。此引用将存储在
a

稍后调用
a={bar:'foo'}
时,您告诉程序更改引用
a
。由于
const
约束,这是不允许的


另一方面,
a.bar='foo'
将修改
a
接收的refenreceived值,但不会修改引用本身。

将对象分配给引用类型的const。现在,如果您向对象添加新关键点或修改关键点的现有值,您可以这样做,因为person保留该对象的引用,并且使用person.age更改的是对象的值,而不是引用。 但是如果你试图给这样的人分配一个新的参照

  const person = { name: 'test', age: 20 };
  person = { name: 'hi', age: 10 };
  console.log(person);
您将得到error Uncaught TypeError:Assignment to constant variable


数组和对象都是引用类型,通过使用相同的引用,可以从对象中添加或删除键,也可以更改值。与使用数组相同,您可以推送新值,也可以弹出,但不能为该常量分配新引用。

对象是引用类型,您不能使用新值/对象重新分配人员,但您可以自由修改对象的内容。。与对象的其他变体相同,常见的用例是数组,您可以从数组中添加/删除项,但如果使用常量定义变量,则可能无法将新数组重新分配给变量。此外,如果要防止修改对象中的值,可能会有所帮助。
const
的行为与对象完全相同。不能重新分配标识符
const obj={foo:1};obj={bar:2}
是一个错误。这有点误导<代码>常量
定义了一个常量值。“引用一个值”基本上是一个毫无意义的东西,他们提到的原因不得而知。1.对象的值是其引用。所以
x={}
不是“对值的引用”。这就是为什么
x==={}
会失败-值比较失败,因为这两个值是不同的引用。这也是为什么
x===x
成功的原因,因为这两个值相等-它是相同的引用。2.“引用值”的意思似乎是我们称之为“标识符”或“绑定”。你知道一个“变量”。他们通过重复使用其他术语引入了令人困惑的术语,以避免使用正确和明确的术语。最后,“不变的原始值”也毫无意义。原语已经是不可变的。您不能“更改”
4
“hello”
等。您可以更改他们将分配给的标识符-
n++
s+=“world”
@VLAZ,感谢您的见解,我稍后会进一步查看并相应地编辑我的答案,除非您想编辑此答案或提交自己的答案