【发布时间】:2025-12-19 10:05:07
【问题描述】:
我有两个数组,
const pets = ["dog", "cat", "hamster"]
const wishlist = ["bird", "snake"]
我想将wishlist追加到pets,可以使用两种方法完成,
方法一:
pets.push.apply(pets,wishlist)
结果:[ 'dog', 'cat', 'hamster', 'bird', 'snake' ]
方法二:
pets.push(...wishlist)
这也会导致:[ 'dog', 'cat', 'hamster', 'bird', 'snake' ]
当我处理更大的数据时,这两种方法在性能方面有区别吗?
【问题讨论】:
-
定义“更大”数据 - 使用方法 2 时 firefox 看起来更慢...其他浏览器可能更快...尝试您自己的基准测试
-
如果你要转译成 ES5,很有可能 Babel/TypeScript 等会生成与
pets.push.apply完全相同的代码。在任何情况下,影响应用程序速度的任何性能差异的可能性都是微乎其微的。你为什么想知道? -
在 JS 中,您可以向函数发送不定数量的参数,但不是无限的。根据当前会话可用的堆栈大小,有一个限制,例如最大 150-300K 参数。根据您的问题,当我进行基准测试时,push.apply 似乎工作得更快。
-
如果不需要保留对数组的引用
.concat()会更合适。 -
您要求的是实现细节,即响应因浏览器和时间而异(因为实现细节可能会发生变化)。从概念上讲,这两种技术是相同的。
标签: javascript arrays ecmascript-6 apply spread-syntax