做以下这些操作有哪些缺点:
var myArray = [];
myArray[myArray.length] = val1;
myArray[myArray.length] = val2;
改为:
var myArray = [];
myArray.push(val1);
myArray.push(val2);
我确定push方法更加“可接受”,但在功能上有什么区别吗?
做以下这些操作有哪些缺点:
var myArray = [];
myArray[myArray.length] = val1;
myArray[myArray.length] = val2;
改为:
var myArray = [];
myArray.push(val1);
myArray.push(val2);
我确定push方法更加“可接受”,但在功能上有什么区别吗?
使用 push 方法速度更快,几乎快了 300%。
push()
快1.5倍以上。 - Timothy Guarray[array.length] =
在大多数情况下都非常接近(Firefox),或者更快(Chrome,Safari)。我使用的是Mac,所以无法准确测试Windows特定的浏览器。 - Benjamin Robinson在JavaScript中,由于数组没有空洞,所以这两种方法的功能是相等的。而且,使用.push()
更加简洁(也更短)。
.push()
要慢得多。但无论如何,在现实生活中这种微小的优化可能并不值得太多。 - Timothy Gu我一直认为长度赋值更快。刚刚在Index vs. push performance网站上找到了证据,至少在我的Chrome 14浏览器中,在单次测试运行中是这样的。然而在Chrome中差异不大。
[].push()
更加简洁易读。代码的维护是编码中最昂贵的部分。根据我的测试,第一种方式更快,我不确定为什么,正在继续研究。此外,ECMA并没有提到哪种方法更好,我认为这取决于浏览器供应商如何实现。
var b = new Array();
var bd1 = new Date().getTime();
for(var i =0;i<1000000; i++){
b[b.length] = i;
};
alert(new Date().getTime()- bd1);
var a = new Array();
var ad1 = new Date().getTime();
for(var i =0;i<1000000; i++){
a.push(i);
};
alert(new Date().getTime()- ad1);
myArray[myArray.length] = val1;
更快吗?你在用什么浏览器? - kzhArray.prototype.push = function(...args) {
return args.reduce(function(p,c) {
p[p.length] = c;
return p
}, this)
};
这样它就可以完美地返回对其调用的数组的引用。
我这里有一个更新的基准测试: jsbench.me
随意检查哪个对于你当前的引擎更快。在Chromium 86上,arr[arr.length]
比arr.push()
快了约40%。