【问题标题】:Javascript: Why does the '=' operator in object assignment creates a reference to the already existing object?Javascript:为什么对象赋值中的“=”运算符会创建对现有对象的引用?
【发布时间】:2019-01-27 02:13:20
【问题描述】:

我正在做以下事情:

let obj = {
    a: 'Hi',
}

let copy = obj;
copy.a = 3;

console.log(obj.a);

令我惊讶的是,obj.a 的值也是3。有人知道为什么会发生这种情况以及如何解决吗?

【问题讨论】:

标签: javascript reference javascript-objects


【解决方案1】:

原始类型作为值传递,例如 Booelan、String、Numbers。

对象类型作为引用传递,如数组、函数和对象

您可以使用 Object.assign(),它在文档中指出:Object.assign() 方法用于将所有可枚举自身属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。

let obj = {
    a: 'Hi',
}

let copy = Object.assign({},obj);
copy.a = 3;

console.log(obj.a);

所以在我们的示例中,{} 是我们的目标(一个空对象),我们的源是 obj 变量。

【讨论】:

    【解决方案2】:

    当您将 Object 类型分配给变量时,您实际上是在存储所谓的指针。 指针只是系统内存中存储对象数据的地址。

    在你的例子中

    let obj = { a: 'Hi' } // obj is now pointing to a reference, say, 0x1a, in memory
    

    当你这样做时

    let copy = obj // copy is now pointing to the same location in memory, that is, 0x1a
    

    本质上copy 和obj 不是对象中的数据,而是对象的地址。对象本身是一些位于内存位置0x1a 的数据块。在obj 或copy 上添加/删除/编辑属性,除了修改位于0x1a 的数据外,什么也不做。

    【讨论】:

      猜你喜欢
      • 2012-02-22
      • 2011-10-16
      • 2013-05-01
      • 2013-10-13
      • 1970-01-01
      • 1970-01-01
      • 2015-05-03
      • 2015-09-24
      相关资源
      最近更新 更多