声明 JavaScript 数组时,“Array()”和“\[\]”有什么区别?

新手上路,请多包涵

像这样声明数组的真正区别是什么:

var myArray = new Array();

var myArray = [];

原文由 Amr Elgarhy 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 987
2 个回答

有区别,但在该示例中没有区别。

使用更详细的方法: new Array() 在参数中确实有一个额外的选项:如果您将一个数字传递给构造函数,您将获得一个该长度的数组:

 x = new Array(5);
 alert(x.length); // 5

为了说明创建数组的不同方法:

 var a = [], // these are the same
 b = new Array(), // a and b are arrays with length 0

 c = ['foo', 'bar'], // these are the same
 d = new Array('foo', 'bar'), // c and d are arrays with 2 strings

 // these are different:
 e = [3] // e.length == 1, e[0] == 3
 f = new Array(3), // f.length == 3, f[0] == undefined

 ;

另一个区别是,当使用 new Array() 时,您可以设置数组的大小,这会影响堆栈大小。如果您遇到堆栈溢出( Array.push 与 Array.unshift 的性能),这可能很有用,这是当数组大小超过堆栈大小时发生的情况,并且必须重新创建它。因此,根据用例,使用 new Array() 实际上可以提高性能,因为您可以防止发生溢出。

正如在 这个答案 中指出的那样, new Array(5) 实际上不会将五个 undefined 的项目添加到数组中。它只是为五个项目增加了空间。请注意,以这种方式使用 Array 会使依赖 array.length 进行计算变得困难。

原文由 nickf 发布,翻译遵循 CC BY-SA 4.0 许可协议

使用隐式数组和数组构造函数创建数组之间的区别很微妙但很重要。

当您使用创建数组时

var a = [];

您告诉解释器创建一个新的运行时数组。根本不需要额外的处理。完毕。

如果您使用:

 var a = new Array();

你告诉解释器,我想调用构造函数“ Array ”并生成一个对象。然后它通过你的执行上下文查找要调用的构造函数,并调用它,创建你的数组。

您可能会想“好吧,这根本不重要。它们是一样的!”。不幸的是,你不能保证这一点。

举个例子:

 function Array() {
    this.is = 'SPARTA';
}

var a = new Array();
var b = [];

alert(a.is);  // => 'SPARTA'
alert(b.is);  // => undefined
a.push('Woa'); // => TypeError: a.push is not a function
b.push('Woa'); // => 1 (OK)

在上面的示例中,如您所料,第一个调用将提醒“SPARTA”。第二个不会。你最终会看到未定义的。您还会注意到 b 包含所有本机 Array 对象函数,例如 push ,而另一个不包含。

虽然您可能希望发生这种情况,但它只是说明了 []new Array() 不同的事实。

最好只使用 [] 如果你知道你只需要一个数组。我也不建议四处走动并重新定义数组…

原文由 coderjoe 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题