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

Why can't I concat an array reference in JavaScript?

本文关键字:连接 数组 引用 JavaScript 不能 为什么      更新时间:2023-09-26

我有两个数组,一个来自函数的引用(参数),另一个是作为函数的一部分创建的-与这里描述的场景完全相同:

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

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

参考数组。连接MDN:

对新数组的任何操作都不会对原数组产生影响,反之亦然

这使得它的行为不同于 Array.push.apply改变原始Array对象-必须使用Array.concat的返回值。否则,它会像上面的MDN链接中解释的那样工作。

如果使用concat,原始数组将是未修改的。如果你有它的引用,你不会看到新的元素

var arr1 = [ "a", "b" ];
var arr2 = [ "c", "d" ];
arr1.push.apply(arr1, arr2);

基本上是这样的:

[ "a", "b" ].push("c", "d");

apply将数组转换为参数列表。顺便说一下,apply的第一个参数是context,在本例中是arr1,因为您希望将推送应用于arr1

可以使用concat:

var arr1 = [ "a", "b" ];
var arr2 = [ "c", "d" ];
var arr3 = arr1.concat(arr2);

这使原来的arr1保持原样。您已经创建了一个包含arr1arr2元素的新数组。如果您有原始arr1的引用,它将是未修改的。这可能是不想使用concat的一个原因。

假设有两个数组"a"answers"b"。Array.concat方法将返回 Array "c"的新实例,该实例表示a与b之间的连接,而a或b没有任何突变。Array.push 返回 push元素的最后一个索引,并改变 this 实例。

从ES6(或15,不确定)开始,可以解包参数,并且可以使用push来连接(没有有害的代码)

a = [1,2,3,4]; // a=[1,2,3,4];
b = [5,6,7,8]; // b=[5,6,7,8]; 
a.push(...b)   // a=[1,2,3,4,5,6,7,8]; b=[5,6,7,8]