首页 > 解决方案 > Javascript:为什么对象赋值中的“=”运算符会创建对现有对象的引用?

问题描述

我正在做以下事情:

let obj = {
    a: 'Hi',
}

let copy = obj;
copy.a = 3;

console.log(obj.a);

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

标签: javascriptreferencejavascript-objects

解决方案


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

对象类型作为引用传递,如 Array、Function 和 Object

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

let obj = {
    a: 'Hi',
}

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

console.log(obj.a);

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


推荐阅读