像这样声明数组的真正区别是什么:
var myArray = new Array();
和
var myArray = [];
原文由 Amr Elgarhy 发布,翻译遵循 CC BY-SA 4.0 许可协议
像这样声明数组的真正区别是什么:
var myArray = new Array();
和
var myArray = [];
原文由 Amr Elgarhy 发布,翻译遵循 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 许可协议
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
有区别,但在该示例中没有区别。
使用更详细的方法:
new Array()
在参数中确实有一个额外的选项:如果您将一个数字传递给构造函数,您将获得一个该长度的数组:为了说明创建数组的不同方法:
另一个区别是,当使用
new Array()
时,您可以设置数组的大小,这会影响堆栈大小。如果您遇到堆栈溢出( Array.push 与 Array.unshift 的性能),这可能很有用,这是当数组大小超过堆栈大小时发生的情况,并且必须重新创建它。因此,根据用例,使用new Array()
实际上可以提高性能,因为您可以防止发生溢出。正如在 这个答案 中指出的那样,
new Array(5)
实际上不会将五个undefined
的项目添加到数组中。它只是为五个项目增加了空间。请注意,以这种方式使用Array
会使依赖array.length
进行计算变得困难。