我经常看到开发者在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
在chrome中,push
似乎要快得多,在FF中则大致相等。IE9中直接赋值更快,但我很想知道它在IE10中的表现。
我认为大多数开发人员会认为设置数组长度,然后使用直接赋值更快,因为这是大多数编程语言的情况。但JavaScript不同。Javascript数组并不是真正的数组,它们只是像所有其他JavaScript对象一样的键/值映射。因此,预分配实际上是无意义的。
个人而言,我更喜欢使用push
(:
push()
可能确实更快。但现在不再是这样了!+1 - svidgenpush
可能是一种替代方法。push
。大多数情况下,可读性和可维护性比性能更重要,至少在性能影响足够小的情况下。这里回答中发布的性能测试显示各种方法之间的性能差异并不大。// 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];
}
就我个人而言,我喜欢带有立即返回语句的函数。这样做简单易懂,方便查看。非常感谢您提出这个问题。
这是一种限制嵌套括号的方法。如果括号太多,你就看不出有多少个或者需要多少个(当以后查看代码时)。我会使用变量,一个人只需要计算一次。
bar = foo.length;
foo[ bar++ ] = "new item 0";
foo[ bar++ ] = "new item 1";
foo[ bar++ ] = "new item 2";
foo[ bar++ ] = "new item 3";
一些程序员不建议使用array.push()
,因为它会修改原始对象。你可以使用扩展运算符代替push()
:
let arrayOne = [1, 2, 3, 4];
let arrayTwo = arrayOne;
arrayTwo.push(5);
console.log(arrayOne);
console.log(arrayTwo);
// equals to arrayOne before the push()
let arrayOneAux = [1, 2, 3, 4];
// spread operator
let arrayThree = [...arrayOneAux, 5];
console.log(arrayOneAux);
console.log(arrayThree);
for
循环)。 - Tim M.