两者之间有什么区别(如果有)
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:[]}
[]需要一些快捷方式,并且在内部不执行构造函数所执行的某些代码。如果您不关心性能或其他极端情况问题,请确保使用其中任何一种。如果您确实在乎,则应该了解差异,因为其中有些差异。所以说的是“是”,在每种情况下您都会得到空数组,但是“否”,它在结构/内部不会相同。