我经常使用Array.from()
或[...foo]
从可迭代对象中获取数组。我也可以迭代它并手动推送到一个数组,但我更喜欢原生数据,因为它很简单,我认为本机实现会更有效。
但是,我发现一些基准测试结果显示那些原生方式较慢。
https://jsperf.com/set-iterator-vs-foreach/4
我还在Chrome和Firefox上运行了更少(50)和更多(10k)元素的测试,但最终得到了类似的结果。
https://jsfiddle.net/unarist/k0cu8wta/2/
我可以理解[...foo]
比Array.from()
更快,因为Array.from()
必须处理类似数组的对象和mapFn
参数,但我找不到合理的理由约在[...foo]
和for..of
+ push()
之间。
是什么让for..of
+ push()
比Array.from()
和[...foo]
更快?
更新:我关心的不是 还有我应该使用哪种。我很惊讶本机版本比JS版本慢,我想知道为什么,因为我认为“一般来说,本机版本很快”。
(例如,本地人比循环+推送方式更多的工作,对某事物的特殊优化等)。
我在Windows 10 x64上测试了Chrome 60和Firefox 54。