为什么将一个对象的值分配给另一个对象的值,然后重新分配原始对象会更改两个对象?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么将一个对象的值分配给另一个对象的值,然后重新分配原始对象会更改两个对象?相关的知识,希望对你有一定的参考价值。

我正在对以下对象数组执行一些计算:

array = [ { x: 6, y: 2 }, { x: 7, y: 2 }, { x: 8, y: 2 } ]

在每次迭代中,我将每个对象都设置为等于其相邻对象,但索引0处的对象除外。

for (let i = array.length - 1; i > 0; i--) {
 array[i] = array[i-1]
}

并且得到以下答案:

[ { x: 6, y: 2 }, { x: 6, y: 2 }, { x: 7, y: 2 } ]

然后我将对象设置为索引0,并得到:

[array[0].x = 5并得到:[ { x: 5, y: 2 }, { x: 5, y: 2 }, { x: 7, y: 2 } ]

我的假设是索引1的对象也不会被更改。为什么会这样?

答案

这是因为您要分配引用而不是值:

array[i] = array[i-1]

您可以使用例如Object.assign()创建对象的浅表副本:

array[i] = Object.assign({}, array[i-1])

以上是关于为什么将一个对象的值分配给另一个对象的值,然后重新分配原始对象会更改两个对象?的主要内容,如果未能解决你的问题,请参考以下文章

Java:请教关于String对象的重新赋值

是否可以将一个功能“分配”给另一个功能?

即使将输入变量分配给另一个变量,python如何更改函数中输入变量的值? [复制]

将一个数组中的值分配给另一个数组而不循环

一个bean ,new了两个对象,一个对象有值 如果把把这个对象的值赋值给另一个对象 那么他们的关系是引用还是

在将一个对象分配给另一个对象时,实际发生了啥,保留对象还是整个副本?