为啥在Javascript中将一个对象分配给另一个变量也会改变初始对象[重复]

Posted

技术标签:

【中文标题】为啥在Javascript中将一个对象分配给另一个变量也会改变初始对象[重复]【英文标题】:Why assigning an object to another variable changing the initial object as well in Javascript [duplicate]为什么在Javascript中将一个对象分配给另一个变量也会改变初始对象[重复] 【发布时间】:2016-08-26 21:22:52 【问题描述】:

我正在尝试做-

var a = key1: "Value1", key2: "Value2";
var b = a;
b.key3 = "Value3";

虽然我期待 a 仅控制台 key1: "Value1", key2: "Value2"

但如果我这样做console.log(a),结果如下 -

key1: "Value1", key2: "Value2", key3: "Value3"

目前我设法使用ES6 Object.assign 方法使其工作 -

var a = key1: "Value1", key2: "Value2";
var b = Object.assign(, a);
b.key3 = "Value3";
console.log(a); // key1: "Value1", key2: "Value2"

但我很想知道 javascript 中出现这种情况的原因。

仅供参考 - 我尝试搜索/谷歌但无法找到,因为我不知道要遵循的确切阶段。

【问题讨论】:

对象不被复制,只被引用。 【参考方案1】:

通过var b = a;,它只是对同一个对象进行了另一个引用,可以通过a和b访问。

Object.assign() 方法用于将所有可枚举自身属性的值从一个(或多个)对象复制到另一个对象。

var o1 =  a: 1 ;
var o2 =  b: 2 ;
var o3 =  c: 3 ;

var obj = Object.assign(o1, o2, o3);
console.log(obj); //  a: 1, b: 2, c: 3 
console.log(o1);  //  a: 1, b: 2, c: 3 , target object itself is changed.

【讨论】:

以上是关于为啥在Javascript中将一个对象分配给另一个变量也会改变初始对象[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何将一个对象数组的一个属性的值分配给另一个对象数组的同名属性? - Javascript

javaScript 中将一个 对象 赋值给 另一个 的问题

在C#中将两个字节变量的加法结果分配给另一个字节变量产生错误,只能分配给int变量[duplicate]

如何在 JavaScript 中将 id 从另一个 const 传递给另一个 const?

当我将一个字典分配给另一个变量时,为啥 Python 会同时更新两个字典? [复制]

为啥没有给另一个进程访问内存位置的权限?