【问题标题】:Javascript - Effect of assigning empty objectJavascript - 分配空对象的效果
【发布时间】:2017-04-06 12:53:08
【问题描述】:

JavaScript 学习者 - 请帮助理解,

在下面的 JS sn-p 中,当一个“昵称”属性添加到对象 person1 时,它也会反映在 Person 对象中。

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


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 {  }

提前致谢!!

【问题讨论】:

    标签: javascript object ecmascript-5


    【解决方案1】:

    在下面的 JS sn-p 中,当一个“昵称”属性被添加到对象时 person1,它也反映在 Person 对象中。

    你这样做person1 = person 所以,现在两个变量都指向同一个内存地址,所以变化的一个也会反映在另一个上。

    但是,当 person1 设置为空对象 {} 时,请帮忙 明白为什么它不会影响 person 对象吗?

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

    【讨论】:

    • 嗨,阿米特,感谢您的宝贵时间!能够与您在上面关于 {} 分配新内存地址的解释相关联,但是,将 null 或 undefined 分配给 Person1 也不会影响 Person 对象 - 任何提示为什么?
    【解决方案2】:

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

    当你用另一个值替换一个引用时,旧的引用将被切断,新的object将被存储起来。

    【讨论】:

      猜你喜欢
      • 2022-11-17
      • 2016-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      相关资源
      最近更新 更多