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()快呢?

解决方案 »

  1.   

    估计是因为 new Array() 要先被解释为 [] 再继续执行!new Array 的语义更明确,更易读!推荐使用此种声明!效率是一方面,而代码的易读性和可维护性更重要,鱼和熊掌不可兼得,
    而效率问题可通过升级解决(需要特殊设计,如并行计算等),而代码的易读性和可维护性则不然!
      

  2.   


    应该就是你说的这个原因了,new Array要先被解释成[],然后再执行操作。
      

  3.   

    new Array还得判断参数形式。
    arrayObj = new Array()
    arrayObj = new Array([size])
    arrayObj = new Array([element0[, element1[, ...[, elementN]]]])
      

  4.   

    很简单,Array()是一个对象,[]是一个数据原型。使用new Array()系统每次都会新生成一个对象(浏览器每生成一个对象都会耗费资源去构造他的属性和方法),他的子集是[];个人推荐使用[],效率高。浏览器对于CPU很吃紧,所以很多时候要有技巧。比如数字转换成字符只要a=a+'';就可以了,比用String效率高了很多。但是如果乱用是会造成错误的
      

  5.   

    恩,#6 说滴是,Array 还有一堆重载的构造函数,总之封装滴越多,解释起来越慢,但同时也越易读,易维护!汇编解释起来很快,但按位移动数次以后您还能保持头脑清醒么?!
      

  6.   


    个人习惯问题,不过个人还是比较喜欢用[]的。直观明了,而且效果略高。只是新手不知道两者的区别而已。我看过很多老外的代码  都是使用[]的。而国内大部分都是实例Array.从效率的角度上考虑并非是习惯问题了,而是新手与老手之间的问题了。
      

  7.   

    因为  '[]' 的代码长度比 ‘new Array()’的长度短 哈哈
      

  8.   

    你们的测试意义不大,而且很容易犯下“不要使用大数据的字面量对象”的戒条。考虑以下代码:I.使用常规方式创建对象并赋值<script type="text/javascript">
    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的代码则可以很好的运行!
      

  9.   


    第二个为什么不是这样写
    var a = [];
    for(var i=0;i<7000;i++){a[i]= i;}
    alert(a[a.length-1]);
    好笑,你怎么不说让一奔4双核+2G内存和一个赛扬单核+512M内存比性能
      

  10.   

    不好意思,话说过头了!不过你想一下,你说的情况,可能出现?对于一个写程序的人来说,当数组项多达几十上百时,哪个会这样写?
    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() 和 [] 比那个更好。只是习惯写 [], 比较直接而己。
      

  11.   

    我觉得24楼说的很好, 为了证明这个论题, var s = [1, 2, 3...9999]; 只能和 var s = new Array(1,2,3...9999)比较.dh20156虽然是好意, 但理解力好像有些问题.
      

  12.   


    我也认为拿这两段代码作对比,不妥[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]);
      

  13.   

    你机器有问题,为什么我的机器上测试时是new Array() 比 [] 快 呢
      

  14.   

    还是建议使用new Array,易读性好,因为你的代码不只是给你自己看,有时候会让别人看,
    没有学过JS的人他知道[]是数组吗?
    再者你循环10000次,才差8ms,这对于人来说根本没有区别。假如差8s那才是考虑性能的时候。
      

  15.   

    感谢大家的回复~
    我单独使用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/