建议:进行数组合并时,若不确定数组最终长度或者数组长度超过下述表中数据,建议使用 concat
最近踩了个坑,在进行数组合并时出现了栈溢出的报错。
示例代码:
const arr = []
for (let i = 0; i < 500000; i++) {
arr.push(i)
}
let arr2 = []
// 出错:下面这3种进行数组组合的方式会报栈溢出
arr2.push.apply(arr2, arr)
arr2.push.call(arr2, ...arr)
arr2.push(...arr)
// 正确:下面可以
arr2 = arr2.concat(arr)
原因:
虽然 ECMAScript 5.1 标准 8.8 里说可以任意长度,但实际运行中是有限制的。即 JavaScript 函数可以接受的参数数量是有上限的!!!
各浏览器限制如下:
我自己亲测 nodejs 的最长限制是:125563
参考:https://stackoverflow.com/questions/61740599/rangeerror-maximum-call-stack-size-exceeded-with-array-push