concat(array)
比push(...array)
我一直在使用.push(...)
方法连接两个数组,解包第二个数组,使用三点符号,并将其作为参数(array1.push(...array2)
)传递.但我只是注意到.concat(...)
做了同样的事情,至少就我所知是这样.
我只想知道使用一个比使用另一个有什么好处,如果有的话,除了.concat(...)
更习惯用之外.
concat(array)
比push(...array)
我一直在使用.push(...)
方法连接两个数组,解包第二个数组,使用三点符号,并将其作为参数(array1.push(...array2)
)传递.但我只是注意到.concat(...)
做了同样的事情,至少就我所知是这样.
我只想知道使用一个比使用另一个有什么好处,如果有的话,除了.concat(...)
更习惯用之外.
在抛出错误之前,JavaScript引擎通常会对可以传递给方法的参数数量设置上限,例如,下面的代码在Chrome中抛出错误:
const arr = Array(150000).fill(0);
const arr2 = [];
arr2.push(...arr);
而当使用.concat()
时,您将只将一个数组传递给该方法,因此您不会收到错误:
const arr = Array(150000).fill(0);
const arr2 = [];
const res = arr2.concat(arr);
// res is an array with 150000 `0`s
此外,使用.push()
+...
可以有效地对可迭代/数组执行两次迭代,一次是将其内容解包为.push()
方法的参数,另一次是由.push()
方法本身在内部完成的一次迭代,以迭代每个参数并将其附加到目标array.
另一个值得注意的区别是两个方法返回的内容不同,.concat()
将返回一个新数组,不会修改目标,这在.map()
或.reduce()
等方法中很有用,在这些方法中,您需要在不改变原始数组的情况下生成新array.而.push()
将返回更新后的数组的长度并修改目标,因此这是另一个需要考虑的差异.