使用" ="复制对象;运算符,更改未反映在数组

时间:2017-03-26 00:19:08

标签: javascript arrays object

所以这是一个非常简单的问题。让我们说我们有几个对象的数组。然后,使用find函数,我们从数组中选择一个对象。如果我更改该对象的属性,则更改将按预期反映在数组中。

但是,如果我使用不同的对象定义新变量并将其设置为数组中的选定项,则更改将不可见。 E.g:

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

1 个答案:

答案 0 :(得分:2)

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

当你写item = newItem时,你会说:“嘿道路标志item,你能指向newItem当前指向的对象吗?”