问题描述
我很不明白为什么这个测试:
。
除此之外,调用 push
的方法可能有与使用for循环的索引相比,确定当前数组长度可能需要额外的时间。
通常有 - 该方法可以完全实现该操作,并使一些代码更容易阅读。虽然有些人认为一个版本比另一个版本更快,但两者都在浏览器中同样优化。请参阅和 - 结果变化如此之大以至于实际上无关紧要。 使用更好的理解。
I pretty don't understand why this test :
http://jsperf.com/push-method-vs-setting-via-key
Shows that
a.push(Math.random());
is over ten times slower than
a[i] = Math.random();
Could you explain why this is the case ? What magic "push" do that make it so slow ? (or so slow compared to other valid method of doing that).
EDIT
NOTE: The push test is biased. I increase size of the array every iteration! Read carefully accepted answer!
Because your test is flawed. The push
does always append to the existing a
array making it much larger, while the second test does only use the first 1000 indices.Using the setup
is not enough here, you would have to reset the a
array before every for-loop: http://jsperf.com/push-method-vs-setting-via-key/3.
Apart from that, the method call to push
might have a little overhead, and determining the current array length might need additional time compared to using the index of the for-loop.
Usually there is no reason not to use push
- the method is there for exactly that operation and makes some code easier to read. While a few people think one version is faster than the other, both are equally optimized in browsers. See Why is array.push sometimes faster than array[n] = value? and Using the push method or .length when adding to array? - results vary so wide that it's actually irrelevant. Use what is better to understand.
这篇关于为什么push方法比在Javascript中通过数组索引放置值要慢得多的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!