两者(如果有的话)之间有什么区别?
x = Array()
并且
x = new Array()
我该使用哪一个?
两者(如果有的话)之间有什么区别?
x = Array()
并且
x = new 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()
。
new Array(5)
会得到 [,,,,]
。 - Stefan OctavianArray.of
: "Array.of(7)创建一个只含有一个元素7的数组,而Array(7)创建一个长度属性为7的空数组"。 - Rsh有些值得一提的事实:
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]
[]
与Array
和new Array
相同的说法是不正确的。您可以在此处阅读更多信息:https://dev59.com/BnNA5IYBdhLWcg3wgeOk - azrahelArray
是原生的话,使用上述任何表达式都会得到相同的空数组,请尝试使用{a:new Array,b:new Array(),c:[]}
。 - Alex Szücs[]
会快捷一些,它在内部不执行构造函数中的某些代码。如果您不关心性能或其他边缘情况问题,那么可以随便使用哪个。但是如果您确实关心,就应该知道其中的区别,因为它们之间存在一些差异。所以我的意思是,是的,在每种情况下都会获得空数组,但是不,它们在结构/内部上并不相同。 - azrahelArray === Array.prototype.constructor
的结果为 true
,这在 99% 的 JavaScript 函数中都是无关紧要的。 - Melab我认为两种方法都是等效的。然而,在JavaScript中,你应该始终使用直接量语法:
x = []
根据我所拥有的浏览器测试结果,Array(1, 2, 3)
和 new Array(1, 2, 3)
的结果相同,Array(15)
和 new Array(15)
也是如此。或者只使用 new Array()
。
x = [ ]
。 - mu is too shortnew Array
仍然是有效的,你可以使用它,并且正如 TrevorBurnham 指出的那样,在某些情况下可能有好处(是的,在某些浏览器上是这样的)。2)[]
更短,更清晰,在我看来 - 它指定了一个列表,语法在许多其他语言中也是相同的。new Array()
感觉像new String()
和new Number()
,这通常是错误的。 - Ry-new Array(9)
和new Array(9, 10)
的结果非常不同,可能出乎意料。 - RobG