之间有什么区别(如果有的话)
x = Array()
和
x = new Array()
我应该使用哪一种?
之间有什么区别(如果有的话)
x = Array()
和
x = new Array()
我应该使用哪一种?
该规范说:
当
Array
作为函数而不是构造函数调用时,它会创建并初始化一个新的 Array 对象。因此,函数调用Array(…)
等效于new Array(…)
具有相同参数的对象创建表达式。
您应该使用文字[]
. 此处概述了原因。使用Array()
构造函数可能会有歧义,因为它接受一个length
或一个元素列表:
new Array(5) // []
new Array('5') // ['5']
[5] // [5]
['5'] // ['5']
您可以在Array
没有new
运算符的情况下使用的原因是它在内部对构造函数执行了一个常见的技巧:
function Thing(){
if (!(this instanceof Thing)){
return new Thing()
}
// ... define object
}
也就是说,如果你打电话,Thing()
它会打电话new Thing()
给你。
我相信两者是等价的。但是,至少在 JavaScript 中,您应该始终使用文字语法:
x = []
但基于在我的浏览器的一些测试,Array(1, 2, 3)
给出了相同的结果new Array(1, 2, 3)
,并与同Array(15)
和new Array(15)
。或者只是简单的new Array()
。
一些值得一提的事实:
Array === Array.prototype.constructor //true
和
new Array()
不一样的new Array
和[]
,以及
但是调用构造函数的结果不一定等同于创建对象的新实例。例子:
Foo = function(){}
x = Foo() // undefined
y = new Foo // {}
所以 x 和 y 可以不同。
但是如果对象本身是一个数组,你会得到相同的定义,如前所述。
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]