Javascript 原始数组值将被修改

Javascript 原始数组值将被修改,javascript,arrays,Javascript,Arrays,我有以下代码: 设a={x:x}; 设b={b:“b”}; 设版本=[a,b]; 让copyOfVersions=Array.from(版本); let test=[“test”]; copyOfVersions[0]。versions=Array.from(测试); console.log(版本[0]。版本)是的,您使用array.from创建了一个新的数组实例。所以versions和copyOfVersions是两个不同的对象,但它们都包含对相同对象的引用列表。这意味着当你说copyOfV

我有以下代码:

设a={x:x};
设b={b:“b”};
设版本=[a,b];
让copyOfVersions=Array.from(版本);
let test=[“test”];
copyOfVersions[0]。versions=Array.from(测试);

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

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

a
b
分别是对对象
{x:x}
{b:b}
的引用

创建新阵列时,会将这些引用复制到新阵列中,但不会复制引用的对象,引用的仍然是原始对象


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

a
b
分别是对对象
{x:x}
{b:b}
的引用

创建新阵列时,会将这些引用复制到新阵列中,但不会复制引用的对象,引用的仍然是原始对象


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

Array.from不执行深度复制。为什么您认为
Array.from
复制数组中的对象?我在找到此帖子时使用了
Array.from
。但即使不执行复制,也会创建一个新实例。所以我不明白原始值为什么会改变?可能重复引用您在接受答案时的链接:“切片将对象引用复制到新数组中。原始数组和新数组都引用同一个对象。如果引用的对象发生更改,则新数组和原始数组都可以看到这些更改。”Array.from不执行深度复制为什么你认为
Array.from
复制数组中的对象?我找到这篇文章时使用了
Array.from
。但即使不执行复制,也会创建一个新实例。所以我不明白原始值为什么会改变?可能重复引用您在接受答案时的链接:“切片将对象引用复制到新数组中。原始数组和新数组都引用同一个对象。如果引用的对象发生更改,则新数组和原始数组都可以看到这些更改。”