我经常看到开发人员在 JavaScript 中使用如下表达式:
arr = []
arr[arr.length] = "Something"
arr[arr.length] = "Another thing"
不是push
更合适吗?
arr = []
arr.push("Something")
arr.push("Another thing")
我经常看到开发人员在 JavaScript 中使用如下表达式:
arr = []
arr[arr.length] = "Something"
arr[arr.length] = "Another thing"
不是push
更合适吗?
arr = []
arr.push("Something")
arr.push("Another thing")
今年年初,我实际上问过自己同样的问题。更新了新的测试用例 http://jsperf.com/array-push-vs-unshift-vs-direct-assignment/2
看起来它push
在 chrome 中要快得多,在 FF 中几乎相等。在 IE9 中直接也更快,但我很想看看它在 IE10 中的表现如何。
我想说大多数开发人员会假设设置数组的长度,然后使用直接赋值更快,就像大多数编程语言一样。但是 JavaScript 不同。Javascript 数组并不是真正的数组,它们只是键/值映射,就像所有其他 JavaScript 对象一样。所以预分配基本上是置若罔闻。
我个人更喜欢push
(:
我相信这主要是习惯。
一些开发人员使用它只是因为这是他们习惯使用的方式,并且没有考虑过push
这是一种替代方法。
一些开发人员曾经了解到一种方法比另一种方法要快得多,并且鉴于 Javascript 引擎最近的性能改进而没有对此进行审查。
我个人push
经常使用。大多数时候,可读性和可维护性比性能更重要,至少在性能影响足够小的时候是这样。此处答案中发布的性能测试表明,各种方法之间的性能差异不是很大。
这是一种限制嵌套括号的方法。如果您有足够的数量,您将看不到有多少或需要多少(稍后查看代码时)。我会使用一个var,一个人应该只需要计算一次。
bar = foo.length;
foo[ bar++ ] = "new item 0";
foo[ bar++ ] = "new item 1";
foo[ bar++ ] = "new item 2";
foo[ bar++ ] = "new item 3";
我认为这与性能无关,或者至少没什么大不了的……这里真正重要的是声明性方式与命令性方式。
很多时候,当我将一个对象推入一个数组时,我希望将对该对象的引用返回给我。例如:
// Returns object
function createAndAdd(arr) {
return arr[arr.length] = { id: 1 };
}
var obj = createAndAdd(arr);
现在我有了新对象并将其添加到数组中。如果我使用 push,那么我将返回数组的长度。它如下所示:
function createAndAdd(arr) {
var obj = { id: 1 };
arr.push(obj);
return obj;
}
甚至更丑,尤其是当物体变大时:
function createAndAdd(arr) {
return arr[arr.push({ id: 1 }) -1];
}
就个人而言,我喜欢带有立即返回语句的函数。保持简单易看。喜欢这个问题。谢谢你问。
Array.prototype.push 方法返回更新后的数组的长度,而直接声明返回正在分配的值。这是我看到的唯一区别,但我通常会阅读一些关于 push 方法的最佳实践建议,它是为数组分配新值的更好方法。