Array.prototype.concat的行为不符合预期

时间:2019-03-14 14:04:12

标签: javascript arrays

var a = [{}];
var b = [];
var c = a.concat(b);

console.log(a[0] === c[0]);
c[0] = undefined;
console.log("a[0] value: ", a[0]);
console.log("c[0] value: ", c[0]);

来自https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat

  

对象引用(而不是实际对象):concat复制对象   引用到新数组中。原始数组和新数组都引用   到同一个对象。也就是说,如果修改了引用的对象,   更改对新阵列和原始阵列均可见。这包括   也是数组的数组参数元素。

当我修改a[0]时,我期望c[0]的值更改为undefined,因为a[0]c[0]都持有对同一对象的引用,但显然这不是这里发生的事情。我想念什么?

2 个答案:

答案 0 :(得分:3)

  

对象引用(而不是实际对象):concat将对象引用复制到新数组中。

确实复制了对象 reference ,但是复制的参考仍然独立于第一个参考。分配给数组元素只会更改该引用。实际上,在FUNCTION($entityPolicy, "typeForWord:" , $source.word)之后,您有一个[0]和c [0]指向同一对象。

concat()

但是分配给c [0]只会用undefined覆盖引用,而保持对a [0](和对象)的引用不变。

答案 1 :(得分:-1)

mozilla JS Documentation “ concat()方法用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。” concat方法返回一个全新的数组对象,而与参数无关。