为什么for..of + push()可能比Array.from(foo)和[... foo]更快?

una*_*ist 6 javascript ecmascript-6

我经常使用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.