Array() vs new Array()

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

x = Array()

还有

x = new Array()

Which one should I use?

29418 次浏览

我相信两者是等价的,但是,至少在 JavaScript 中,你应该总是使用文字语法:

x = []

但是基于我在浏览器中的一些测试,Array(1, 2, 3)给出了与 new Array(1, 2, 3)相同的结果,与 Array(15)new Array(15)相同。或者只是简单的 new Array()

规格表示:

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

您应该使用字面 []。原因概述 给你。使用 Array()构造函数可能是不明确的,因为它接受 length或元素列表:

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(),它会为你调用 new Thing()

一些值得一提的事实:

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

还有

new Array()new Array[]具有相同的功能

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

Foo = function(){}


x = Foo()   // undefined
y = new Foo // {}

所以 x 和 y 可以是不同的。

但是如果 Object 本身是一个 Array,那么按照前面提到的定义,您将得到相同的结果。

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]