原始数组值已修改

时间:2017-06-22 14:49:13

标签: javascript arrays

我有这段代码:

let a = {x: "x"};
let b = {b: "b"};

let versions = [a, b];
let copyOfVersions = Array.from(versions);
let test = ["test"];
    
copyOfVersions[0].versions = Array.from(test);

console.log(versions[0].versions);

为什么versions表值也发生了变化?

谢谢!

2 个答案:

答案 0 :(得分:1)

是的,您使用 Array.from 创建了一个新的数组实例。所以版本 copyOfVersions 是两个不同的对象,但它们都包含对同一对象的引用列表。这意味着当您说 copyOfVersions [0] versions [0] 时,您基本上是在访问同一个对象 a 。然后,当您使用 .versions 时,您将添加一个新字段。最后,只有对象 a 已被更改,这就是您所看到的打印输出。

答案 1 :(得分:1)

ab分别是对象{x: "x"}{b: "b"}的引用。

创建新数组时,这些引用会复制到新数组,但引用的对象不会被复制,它仍然是引用的原始对象。

copyOfVersions[0]获取引用的对象,versions[0]引用的同一对象,然后在该对象上创建属性versions。由于对象本身从未被复制过,因此您需要修改原始对象。