Javascript 数组()与新数组()的比较

Javascript 数组()与新数组()的比较,javascript,arrays,Javascript,Arrays,两者之间有什么区别(如果有的话) 及 我应该用哪一个呢?我认为两者是等价的。但是,至少在JavaScript中,您应该始终使用文字语法: x = [] 但是根据我在浏览器中的一些测试,Array(1,2,3)给出了与新数组(1,2,3)相同的结果,与Array(15)和新数组(15)相同。或者只是简单的newarray(),上面写着: 当Array作为函数而不是构造函数调用时,它会创建并初始化一个新的数组对象。因此,函数调用Array(…)相当于具有相同参数的对象创建表达式newarray(…

两者之间有什么区别(如果有的话)


我应该用哪一个呢?

我认为两者是等价的。但是,至少在JavaScript中,您应该始终使用文字语法:

x = []
但是根据我在浏览器中的一些测试,
Array(1,2,3)
给出了与
新数组(1,2,3)
相同的结果,与
Array(15)
新数组(15)
相同。或者只是简单的
newarray()

,上面写着:

Array
作为函数而不是构造函数调用时,它会创建并初始化一个新的数组对象。因此,函数调用
Array(…)
相当于具有相同参数的对象创建表达式
newarray(…)


您应该使用文本
[]
。概述了原因。使用
Array()
构造函数可能不明确,因为它接受
长度或元素列表:

new Array(5)   // []
new Array('5') // ['5']

[5]   // [5]
['5'] // ['5']
在不使用
new
操作符的情况下使用
Array
的原因是,它在内部对构造函数执行了一个常见的技巧:

function Thing(){
    if (!(this instanceof Thing)){
        return new Thing()
    }
    // ... define object
}

也就是说,如果你调用
Thing()
,它将为你调用
newthing()

一些值得一提的事实:

Array === Array.prototype.constructor //true

new Array()
的作用与
new Array
[]
的作用相同

但是调用构造函数的结果并不等同于创建对象的新实例。例如:

Foo = function(){}

x = Foo()   // undefined
y = new Foo // {}
所以x和y可以不同

但是,如果对象本身是一个数组,您将得到与前面提到的相同的定义

x = Array()   // []
y = new Array // []
即使传递一个整数(告诉长度)

或一个非整数(告诉内容)

一个或多个参数(告诉内容)


正确,两者完全相同。您可能应该在JavaScript和CoffeeScript中同时使用
x=[]
,除非出于某种原因需要预先调整数组的大小。mu完全正确:使用
arr=new array(n)
(其中
n
是一个数字)如果且仅当您正在做一些性能密集型的事情,并且事先知道阵列的大小,那么所需的内存将一次分配完毕(原则上)。@minitech-为什么“应该”?@TrevorBurnham-没有理由相信设置length属性会导致分配任何内存或提高性能。您可能会发现这很有趣:实际上,
新数组(5)
给出了
[,,,]
关于对象文字的部分
[]
数组
新数组
相同,恐怕不是真的。阅读更多内容:@azrahel您将使用上述任何表达式获得相同的空数组(如果
array
是本机的),请尝试:
{a:new array,b:new array(),c:[]}
否您将不会:)只需阅读链接或文档即可。使用object literal
[]
会采用一些快捷方式,并且在内部不会执行构造函数执行的某些代码。如果您不关心性能或其他边缘案例问题,当然可以使用其中的一个。如果你真的在乎,你应该知道差异,因为有一些差异。所以我说的是“是”,在每种情况下都会得到空数组,但“否”在结构上/内部不会相同。@azrahel毫无疑问,性能可能会有所不同,但从技术上讲,每种都做相同的事情。参考:,
Foo = function(){}

x = Foo()   // undefined
y = new Foo // {}
x = Array()   // []
y = new Array // []
x = Array(3)     // [empty × 3]
y = new Array(3) // [empty × 3]
x = Array(true)     // [true]
y = new Array(true) // [true]
x = Array(1,2,3)     // [1,2,3]
y = new Array(1,2,3) // [1,2,3]