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]
都持有对同一对象的引用,但显然这不是这里发生的事情。我想念什么?
答案 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方法返回一个全新的数组对象,而与参数无关。