我有这段代码:
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
表值也发生了变化?
谢谢!
答案 0 :(得分:1)
是的,您使用 Array.from 创建了一个新的数组实例。所以版本和 copyOfVersions 是两个不同的对象,但它们都包含对同一对象的引用列表。这意味着当您说 copyOfVersions [0] 和 versions [0] 时,您基本上是在访问同一个对象 a 。然后,当您使用 .versions 时,您将添加一个新字段。最后,只有对象 a 已被更改,这就是您所看到的打印输出。
答案 1 :(得分:1)
a
和b
分别是对象{x: "x"}
和{b: "b"}
的引用。
创建新数组时,这些引用会复制到新数组,但引用的对象不会被复制,它仍然是引用的原始对象。
copyOfVersions[0]
获取引用的对象,versions[0]
引用的同一对象,然后在该对象上创建属性versions
。由于对象本身从未被复制过,因此您需要修改原始对象。