最好写: var arr=[];比 var arr=new Array();? [复制]
Posted
技术标签:
【中文标题】最好写: var arr=[];比 var arr=new Array();? [复制]【英文标题】:Is it better to write: var arr=[]; than var arr=new Array();? [duplicate] 【发布时间】:2011-03-24 02:24:52 【问题描述】:这样写更好吗
var arr=[]; then var arr=new Array();
var obj=; then var obj=new Object();
如果是这样,为什么?
我阅读了 slide lection page 36 关于这个想法的信息,但没有给出解释或示例为什么它更好。
【问题讨论】:
好问题!在我看来,从代码美感的角度来看,new Array()
看起来更干净。有兴趣看看会发生什么。
提议的欺骗没有提及对象。
【参考方案1】:
除了第一种方式使用数组/对象字面量和第二种方式使用数组/对象构造函数之外,这些定义之间没有太大区别。
数组构造函数可能会返回不同的结果,具体取决于传入的参数数量。如果传入一个参数,则会创建一个具有该参数长度的新空数组。例如:
// arr1 is the same as arr2
var arr1 = new Array(1, 2, 3, 4);
var arr2 = [1, 2, 3, 4];
alert(arr1.length == arr2.length); // true
alert(arr1[0]); // 1
alert(arr2[0]); // 1
但是,传入一个参数会产生不同的结果:
// arr3 has length 200 and is empty, while arr4 has length 1 and contains a number
var arr3 = new Array(200);
var arr4 = [200];
alert(arr3.length == arr4.length); // false
alert(arr3[0]); // 'undefined'
alert(arr4[0]); // 200
定义数组或对象最快的方式当然是字面量方式,因为你不需要先调用构造函数。不管怎样,实际的速度差异可以忽略不计,真的。
我在 Chrome 6 中做了一个speed test,其中我定义了 20 次 10000000 相同的数组 1, 2, 3
,得到了这些结果:
Average speed per 10000000 calls
Array Constructor : 226.55 ms
Array Literal : 159.1 ms
如您所见,数组字面量每 10000000 个数组定义快 67.45 毫秒。
【讨论】:
问题也在这里,电脑运行速度更快 虽然Array
构造函数根据参数的数量以不同的方式处理参数是一个有趣的点,但我认为将其列为两种方式之间的差异是完全误导性的创建一个数组。 []
不是您使用参数调用的方法,正如 var a = "test"
是传递给 ""
函数的四个参数一样。它只不过是一种创建数组的语法,只是隐含地处理分配维度。
jsperf.com/literal-vs-constructor-array
@J-P 很棒的测试页;操作/时间优于时间/操作...我在 Firefox 上的测试失败,因为我收到了这个“停止脚本”弹出窗口。【参考方案2】:
从典型的程序员角度来看,您似乎倾向于使用 var arr = new Array();从而给人一种典型对象实例化的感觉。但在 javascript 中,使用 var arr = []; 通常是一种很好的做法。 就我个人而言,除了 Harmen 解释的一个参数外,我认为这两种方式的使用没有太大区别。
也检查此链接 - http://yuiblog.com/blog/2006/11/13/javascript-we-hardly-new-ya/
【讨论】:
【参考方案3】:thomas fuchs 在他的 slideshow 中说,在该视频下(第 20 页上的“拥抱语言”部分): var arr=[] 和 var obj= 更好,速度稍快。我不知道为什么,但无论如何,这是一个非常有趣的幻灯片:)
【讨论】:
以上是关于最好写: var arr=[];比 var arr=new Array();? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
返回数组中的最大值,var arr = [2, 4, 6, 8, 5, 0]; alert(Math.max.apply(this, arr));