什么's是Array.of(n)、Array(n)和Array=[n]之间的差值

What's is the difference between Array.of(n) , Array(n) and array = [n]?

本文关键字:Array 之间 of 什么      更新时间:2023-09-26

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

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

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

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站点有关于Array.of()的文档。构造函数和数组初始值设定项形式已经存在了很久,所以任何JavaScript引用都会覆盖它们(尽管可能没有引用Array.of())。

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

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

Array(2)将创建一个由2个元素组成的数组。

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

CCD_ 10将创建具有元素2的数组。

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