为什么在Javascript中将一个对象分配给另一个变量也会更改初始对象

Why assigning an object to another variable changing the initial object as well in Javascript

本文关键字:对象 变量 另一个 Javascript 一个对象 分配 为什么      更新时间:2023-09-26

我正在尝试做-

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中出现这种情况的原因。

仅供参考-我试着搜索/谷歌,但找不到,因为我不知道接下来的确切阶段。

通过执行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.