Javascript - 分配空对象的效果

时间:2017-04-06 12:53:08

标签: javascript object ecmascript-5

JavaScript学习者 - 请帮助理解,

在下面的JS片段中,当一个"昵称"属性被添加到对象person1,它也反映在Person对象中。

但是,当person1设置为空对象{}时,请帮助理解为什么它不会影响人物对象?

var person  = {
  "firstname" : "Tony",
  "lastname" : "Stark"
};

var person1 = person;

person1.nickname = "Ironman";

console.log(person); 
//Object { firstname: "Tony", lastname: "Stark", nickname: "Ironman" }
console.log(person1);
//Object { firstname: "Tony", lastname: "Stark", nickname: "Ironman" }  

person1 = {};

console.log(person);
//Object { firstname: "Tony", lastname: "Stark", nickname: "Ironman" }  
console.log(person1);
//Object {  }

提前致谢!!

2 个答案:

答案 0 :(得分:0)

  

在下面的JS片段中,当一个"昵称"属性被添加到对象   person1,它也反映在Person对象中。

你做person1 = person所以,现在两个变量都指向相同的内存地址,因此不同的变量也会反映在另一个中。

  

但是,当person1设置为空对象{}时,请提供帮助   明白为什么它不会影响人物对象?

通过执行person1 = {},您为其分配了一个新的内存地址,因此personperson1现在是两个不同的实体并且更改一个不影响对方。

答案 1 :(得分:0)

Objects在被分配给另一个变量时基本上被引用。因此,当您影响存储在变量中的一个object时,它也会影响另一个变量,因为两者都共享相同的引用。

当您使用另一个值替换引用时,旧的引用将被截断,并且将存储带有新内存引用的新object