有没有理由JavaScript开发人员不使用Array.push()?

blo*_*ilk 40 javascript

我经常看到开发人员在JavaScript中使用如下表达式:

arr = []
arr[arr.length] = "Something"
arr[arr.length] = "Another thing"
Run Code Online (Sandbox Code Playgroud)

会不会push更合适?

arr = []
arr.push("Something")
arr.push("Another thing")
Run Code Online (Sandbox Code Playgroud)

gki*_*ely 53

我实际上在今年年初问自己同样的问题.更新了新的测试用例 http://jsperf.com/array-push-vs-unshift-vs-direct-assignment/2

看起来push铬的速度要快得多,FF也差不多.在IE9中直接也更快,但我很想知道它在IE10中的表现如何.

我想说大多数开发人员会假设设置数组的长度,然后使用直接赋值更快,就像大多数编程语言一样.但JavaScript是不同的.Javascript数组不是真正的数组,它们只是键/值映射,就像所有其他JavaScript对象一样.所以预分配基本上是置若罔闻的.

个人我更喜欢push(:

  • 在较新版本的Chrome中,直接分配变得相当快.直接分配(甚至使用.length)现在几乎是使用push的两倍. (6认同)

Guf*_*ffa 5

我相信这主要是习惯。

一些开发人员使用它只是因为这是他们习惯的方式,并且没有考虑到这push是一种替代方案。

一些开发人员曾经了解到一种方法比另一种方法快得多,并且没有根据 Javascript 引擎最近的性能改进来审查这一点。

我个人push经常使用。大多数时候,可读性和可维护性比性能更重要,至少当性能影响足够小时。这里的答案中发布的性能测试表明,各种方法之间的性能差异不是很大。