使用“=”运算符复制对象,更改不会反映在数组中

Copy object with "=" operator, changes not reflected in array

所以这是一个非常简单的问题。假设我们有一个包含多个对象的数组。然后,通过使用 find 函数,我们 select 数组中的一个对象。如果我更改该对象的属性,则更改会按预期反映在数组中。

但是,如果我用不同的对象定义一个新变量并将其设置为数组中的 selected 项,则更改不可见。例如:

let 
arr = [
  {
    id: 1, 
    name: 'James', 
    prop: {
      my: 'prop'
    }
  }, 
  {
    id:2, 
    name:'Delaney', 
    prop: 
    {
      my: 
      'prop'
    }
  }
],
item = arr.find(x => x.id > 1),
newItem = 
    {
      id: 3, 
      name:'test', 
      prop: {
        my: 'test'
      }
    };

item = newItem;
console.log(newItem);
console.log(item);
console.log(arr);

这里我希望由于 itemnewItem 具有相同的值,因此 arr 中也会看到更改,但事实并非如此。如果我在 item 上更改单个 属性,则更改是可见的。给出了什么?

一个工作示例:http://jsbin.com/roxecofesa/1/edit?html,js,console

将变量 item 想象成路标。它指向内存中函数arr.find()返回的对象所在的位置。接下来您创建另一个路标 newItem 指向您新创建的对象。

当您写 item = newItem 时,您是在说:"Hey roadsign item, can you point towards the object that is currently pointed by newItem?"