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,感谢您的见解,我稍后会进一步查看并相应地编辑我的答案,除非您想编辑此答案或提交自己的答案