Firebug下:
var i, a;
console.time('s');
for(i = 0; i < 10000; i++) {
a = [];
}
console.timeEnd('s');console.time('e');
for(i = 0; i < 10000; i++) {
a = new Array();
}
console.timeEnd('e');结果
s: 20ms
e: 28ms为什么[]要比new Array()快呢?
var i, a;
console.time('s');
for(i = 0; i < 10000; i++) {
a = [];
}
console.timeEnd('s');console.time('e');
for(i = 0; i < 10000; i++) {
a = new Array();
}
console.timeEnd('e');结果
s: 20ms
e: 28ms为什么[]要比new Array()快呢?
而效率问题可通过升级解决(需要特殊设计,如并行计算等),而代码的易读性和可维护性则不然!
应该就是你说的这个原因了,new Array要先被解释成[],然后再执行操作。
arrayObj = new Array()
arrayObj = new Array([size])
arrayObj = new Array([element0[, element1[, ...[, elementN]]]])
个人习惯问题,不过个人还是比较喜欢用[]的。直观明了,而且效果略高。只是新手不知道两者的区别而已。我看过很多老外的代码 都是使用[]的。而国内大部分都是实例Array.从效率的角度上考虑并非是习惯问题了,而是新手与老手之间的问题了。
var a = new Array(70000);
for(var i=0;i<a.length;i++){a[i] = i;}
alert(a[a.length-1]);
</script>
II.使用字面量对象<script type="text/javascript">
//由于回复内容字数限制,请大家自行还原以下代码,可以用I的a.join(',')来得到。
var a = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,...,69995,69996,69997,69998,69999];
alert(a[a.length-1]);
</script>
当我们使用IE6测试时会发现,II的代码会让IE6报内存不够的错误,而I的代码则可以很好的运行!
第二个为什么不是这样写
var a = [];
for(var i=0;i<7000;i++){a[i]= i;}
alert(a[a.length-1]);
好笑,你怎么不说让一奔4双核+2G内存和一个赛扬单核+512M内存比性能
var s = [1, 2, 3...9999];可读性差,易出错。最可能的就是想办法循环赋值所以你那样比较以示 var s = new array(n) 更好是不对的。再者说,如果比较 [] 和 new Array();就要在其它条件尽可能一样的前提下才有说服力吧!你为什么不这样:var s = new Array(1, 2, 3, ...9999);var s = [1, 2, 3, ...9999];当然,我没有发现new Array() 和 [] 比那个更好。只是习惯写 [], 比较直接而己。
我也认为拿这两段代码作对比,不妥[e1,e2,e3, ... , en] 就应该和 new Array(e1,e2,e3, ... , en) 对比
------------------------------------------------而var a = new Array(70000);
for(var i=0;i<a.length;i++){a[i] = i;}
alert(a[a.length-1]);最多只能和下面的代码对比var a = []; a.length = 7000;
for(var i=0;i<a.length;i++){a[i] = i;}
alert(a[a.length-1]);
没有学过JS的人他知道[]是数组吗?
再者你循环10000次,才差8ms,这对于人来说根本没有区别。假如差8s那才是考虑性能的时候。
我单独使用spidermonkey测试也是[]比new Array()快一些,不过差距更小,100000次(firebug里的10倍)才快6ms左右,但一直都是[]比new Array()快,没有颠覆的时候。测出new Array()比[]快的同学,咱们可以再研究一下。
有人推荐用[],有人推荐用new Array()。我之前看到的文章都是说[]好的,因为调用构造函数参数可以传得很古怪,而且[]更快。前几天听google的v8团队交流上说几个js小原则也是推荐用字面量创建。因为不明白为什么更快,所以求助大家。
在网上看到Douglas Crockford的一篇文章讲了这个问题,很有启发,大家有兴趣的话也可以参考下,这是翻译后的文章:
http://ued.taobao.com/blog/2007/05/15/%E4%BD%A0%E7%9C%9F%E7%9A%84%E4%BC%9A%E5%86%99javascript%E5%90%97%EF%BC%9F/