【问题标题】: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 中出现这种情况的原因。

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

【问题讨论】:

  • 对象不被复制,只被引用。

标签: javascript javascript-objects


【解决方案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.

【讨论】:

    猜你喜欢
    • 2017-12-19
    • 2016-03-14
    • 1970-01-01
    • 2014-08-26
    • 1970-01-01
    • 2021-01-01
    • 1970-01-01
    • 2012-12-13
    • 1970-01-01
    相关资源
    最近更新 更多