Javascript 为什么对象的重新分配具有不同的值?

Javascript 为什么对象的重新分配具有不同的值?,javascript,Javascript,我知道这听起来有点愚蠢,但我有点被困在这里了 let a={ name:'Pete', }; let b=a; 改变a的属性 a.name='Cindy'; b; //{name: "Cindy"}, b follows a exactly. 为a添加属性 a.age=20; b; //{name: "Cindy", age: 20}, b still follows a. 问题是,现在b不跟随a。。。它现在有了一个不同的值。为什么 a={

我知道这听起来有点愚蠢,但我有点被困在这里了

let a={
    name:'Pete',
};
let b=a;
改变a的属性

a.name='Cindy';
b;  //{name: "Cindy"}, b follows a exactly.
为a添加属性

a.age=20;
b; //{name: "Cindy", age: 20}, b still follows a.
问题是,现在b不跟随a。。。它现在有了一个不同的值。为什么

a={};
b; // {name: "Cindy", age: 20}. b is different from a.

当您第一次创建对象{name:'Pete'}时,您将其分配给a,即a指向内存中的该对象

然后将a指定给b,但实际上是将a指向的对象指定给b,因此现在b指向包含相同对象的相同内存位置

通过将空对象文字指定给,您已经创建了一个新对象,并且a现在指向它

旧对象{name:Cindy,age:20}仍然存在,b仍然指向它。b不会改变,因为a不再指向同一个对象。

当您这样做时

let a = {
  name:'Pete',
};
let b = a;
设a={name:'Pete'}意味着create将分配一些内存并将对象{name:'Pete'}存储在其中。可以使用名为a的变量访问该内存位置 设b=a,因为a是一个对象,b=a将变量b指向相同的内存位置。 现在我们有两个变量指向同一个内存位置。当我们尝试使用任何其他变量访问数据时,使用任何变量对属性进行更改都会反映出来。这就是为什么当你做a.name='Cindy';或添加新道具a.age=20;当我们尝试访问b时也会看到


对象是按引用而不是按值存储的

let a = { name:'Pete' };
上面的一行在内存中创建一个对象,变量a存储对该对象的引用

let b = a
当您使b等于a时,变量b还存储对同一对象的引用

现在,无论何时对对象进行任何更改,它都会反映在变量a和b中,因为它们都存储对同一对象的引用

现在,当您执行a={}时,将在内存中创建一个空的新对象,变量a现在存储对该新对象的引用。但是这不会改变变量b,因为它存储了对第一个没有改变的对象的引用


由于您再次将初始化为空的objectObject,因此请保存引用内存空间,因此a.name='Cindy'和age='20'将保存在同一内存中。但是当你声明a={}`时,它基本上意味着一个新地址。因此,除非您再次声明b=a,否则b不会跟随新地址,非常直接。当然:我这样做了:
let a = { name:'Pete' };
let b = a