两者之间有什么区别(如果有的话)
x = Array()
还有
x = new Array()
Which one should I use?
我相信两者是等价的,但是,至少在 JavaScript 中,你应该总是使用文字语法:
x = []
但是基于我在浏览器中的一些测试,Array(1, 2, 3)给出了与 new Array(1, 2, 3)相同的结果,与 Array(15)和 new Array(15)相同。或者只是简单的 new Array()。
Array(1, 2, 3)
new Array(1, 2, 3)
Array(15)
new Array(15)
new Array()
规格表示:
当 Array作为函数而不是构造函数调用时,它将创建并初始化一个新 Array 对象。因此,函数调用 Array(…)等效于具有相同参数的对象创建表达式 new Array(…)。
Array
Array(…)
new Array(…)
您应该使用字面 []。原因概述 给你。使用 Array()构造函数可能是不明确的,因为它接受 length或元素列表:
[]
Array()
length
new Array(5) // [ , , , , ] new Array('5') // ['5'] [5] // [5] ['5'] // ['5']
可以不使用 new操作符而使用 Array的原因是,它在内部对构造函数做了一个常见的处理:
new
function Thing(){ if (!(this instanceof Thing)){ return new Thing() } // ... define object }
也就是说,如果你调用 Thing(),它会为你调用 new Thing()。
Thing()
new Thing()
一些值得一提的事实:
Array === Array.prototype.constructor //true
new Array()与 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]