为什么我不能在JavaScript中连接数组引用?

Tam*_*mas 7 javascript arrays concat

我有两个数组,一个作为函数的引用(参数),另一个作为函数的一部分创建 - 完全相同的场景如下所述:

不使用concat方法添加两个数组

我按照上面的建议使用push.apply()方法,但有人可以向我解释,为什么我不能使用concat()合并两个数组,如果数组作为参考发送到函数中?

use*_*674 10

请参阅MDN 上的Array.concat:

对新阵列的任何操作都不会对原始阵列产生任何影响,反之亦然.

这使得它的表现有所不同,从Array.push.apply变异原数组对象-的返回值Array.concat必须使用.否则,它的工作原理如上面的MDN链接所述.


Hal*_*yon 9

如果使用concat原始数组将不加修改.如果您有参考它,您将看不到新元素.

var arr1 = [ "a", "b" ];
var arr2 = [ "c", "d" ];
arr1.push.apply(arr1, arr2);
Run Code Online (Sandbox Code Playgroud)

基本上这样做:

[ "a", "b" ].push("c", "d");
Run Code Online (Sandbox Code Playgroud)

apply将数组转换为参数列表.第一个参数applycontext顺便说一下,arr1在这种情况下,因为你想要推送应用arr1.

你可以使用concat:

var arr1 = [ "a", "b" ];
var arr2 = [ "c", "d" ];
var arr3 = arr1.concat(arr2);
Run Code Online (Sandbox Code Playgroud)

这样就保留了原件arr1.您已经创建了一个新的数组,其中包含两个元素arr1arr2元素.如果您对原件有参考,arr1则将不加修改.这可能是不想使用的理由concat.