Array.of(n),Array(n)和array = [n]之间的区别是什么?

时间:2016-01-11 14:25:28

标签: javascript arrays ecmascript-6

作为标题,我想知道这三种初始化数组的方法有什么区别。

我实际上对ES6提供的新Array.of()方法更感兴趣,为什么他们觉得工具的需求呢?

2 个答案:

答案 0 :(得分:21)

可以通过两种方式调用Array构造函数:一个值列表,用作数组元素的值,或者使用一个数值给出初始长度:

var myArray = new Array("hello", "world"); // 2 elements
var otherArray = new Array(100); // 100 elements, all empty

因为只传递一个数字时存在歧义,所以旧的API被认为设计得很糟糕。因此,有Array.of(),它与Array构造函数的第一个选项相同:

var otherArray = Array.of(100); // 1 element

制作数组的第三种方法是使用数组初始化表达式:

var otherArray = [100]; // 1 element

由上述每个创建的数组实例在功能上是等效的,并且完全可以互换。

还有一件事:为什么Array.of()必须存在,因为我们可以使用数组初始化表达式?好吧,Array.of()是一个函数,因此它可以用作函数式编程中应用的值。你可以(作为一个稍微愚蠢的例子)复制一个数组:

var copy = Array.of.apply(Array, original);

愚蠢的一个原因是,(在ES2015中)Array.from()也可以做同样的事情:

var copy = Array.from(original);

适用于任何类型的可迭代原型,因此它是将arguments或NodeList转换为数组的好方法。

MDN site有关于Array.of()的文档。构造函数和数组初始化程序表单一直存在,因此任何JavaScript引用都将涵盖这些(尽管可能没有引用Array.of())。

答案 1 :(得分:3)

Array.of(2)将创建一个包含元素2的数组。

var temp = Array.of(2); // temp = [2]

Array(2)将创建一个包含2个元素的数组。

var temp = new Array(2); // temp = [undefined, undefined]

temp = [2]将创建一个包含元素2的数组。

var temp = [2]; // temp = [2]