Array()vs new Array()

scr*_*avy 53 javascript arrays

两者之间有什么区别(如果有的话)

x = Array()
Run Code Online (Sandbox Code Playgroud)

x = new Array()
Run Code Online (Sandbox Code Playgroud)

我应该使用哪一个?

SLa*_*aks 74

规范说:

Array作为函数而不是构造函数调用时,它会创建并初始化一个新的Array对象.因此,函数调用Array(…)等效于new Array(…)具有相同参数的对象创建表达式.


Ric*_*asi 22

你应该使用文字[].这里概述原因.使用Array()构造函数可能不明确,因为它接受一个length或一个元素列表:

new Array(5)   // []
new Array('5') // ['5']

[5]   // [5]
['5'] // ['5']
Run Code Online (Sandbox Code Playgroud)

你可以在Array没有new运算符的情况下使用的原因是内部它与构造函数有一个共同的技巧:

function Thing(){
    if (!(this instanceof Thing)){
        return new Thing()
    }
    // ... define object
}
Run Code Online (Sandbox Code Playgroud)

也就是说,如果你打电话,Thing()它会打电话new Thing()给你.

  • 实际上,```new Array(5)```给```[,,,,]``` (19认同)
  • 在 ES5 中,为了避免这个问题,你可以使用 `Array.of`:“Array.of(7) 创建一个包含单个元素 7 的数组,而 Array(7) 创建一个长度属性为 7 的空数组” (3认同)

Ale*_*ücs 11

一些值得一提的事实:

\n
Array === Array.prototype.constructor //true\n
Run Code Online (Sandbox Code Playgroud)\n

\n

new Array()new Array与和 的作用相同[]事情

\n

然而,调用构造函数的结果并不一定等同于创建对象的新实例。例子:

\n
Foo = function(){}\n\nx = Foo()   // undefined\ny = new Foo // {}\n
Run Code Online (Sandbox Code Playgroud)\n

所以 x 和 y 可以不同。

\n

但如果对象本身是一个数组,根据定义您将得到相同的结果,如前所述。

\n
x = Array()   // []\ny = new Array // []\n
Run Code Online (Sandbox Code Playgroud)\n

即使你传递一个整数(告诉长度)

\n
x = Array(3)     // [empty \xc3\x97 3]\ny = new Array(3) // [empty \xc3\x97 3]\n
Run Code Online (Sandbox Code Playgroud)\n

或一个非整数(讲述内容)

\n
x = Array(true)     // [true]\ny = new Array(true) // [true]\n
Run Code Online (Sandbox Code Playgroud)\n

或更多参数(告诉内容)

\n
x = Array(1,2,3)     // [1,2,3]\ny = new Array(1,2,3) // [1,2,3]\n
Run Code Online (Sandbox Code Playgroud)\n


Ry-*_*Ry- 7

我相信两者都是等价的.但是,至少在JavaScript中,您应该始终使用文字语法:

x = []
Run Code Online (Sandbox Code Playgroud)

但是基于我所拥有的浏览器中的一些测试,Array(1, 2, 3)给出了相同的结果new Array(1, 2, 3),并且Array(15)new Array(15).或者只是简单new Array().

  • 您应该在JavaScript和CoffeeScript中使用`x = []`,除非您出于某种原因需要预先调整数组大小. (2认同)