两者之间有什么区别(如果有)
x = Array()
和
x = new Array()
我应该使用哪一个?
Answers:
您应该使用文字[]
。这里概述了原因。使用Array()
构造函数可能是模棱两可的,因为它可以接受alength
或元素列表:
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()
为您致电。
new Array(5)
给[,,,,]
我相信两者是等效的。但是,至少在JavaScript中,应始终使用文字语法:
x = []
但基于在我的浏览器的一些测试,Array(1, 2, 3)
给出了相同的结果new Array(1, 2, 3)
,并与同Array(15)
和new Array(15)
。或者只是简单new Array()
。
x = [ ]
除非由于某种原因需要预先调整数组大小,否则您可能应该同时使用JavaScript和CoffeeScript。
arr = new Array(n)
(在哪里n
是数字),因此(原则上)一次分配所有必需的内存。
值得一提的一些事实:
Array === Array.prototype.constructor //true
和
new Array()
与new Array
和[]
一样
但是,调用构造函数的结果不必等同于创建Object的新实例。例:
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
是本地表达式)得到相同的空数组,请尝试:{a:new Array,b:new Array(),c:[]}
[]
需要一些快捷方式,并且在内部不执行构造函数所执行的某些代码。如果您不关心性能或其他极端情况问题,请确保使用其中任何一种。如果您确实在乎,则应该了解差异,因为其中有些差异。所以说的是“是”,在每种情况下您都会得到空数组,但是“否”,它在结构/内部不会相同。