javascript - Array.of(n) 、 Array(n) 和 array = [n] 有什么区别?

标签 javascript arrays ecmascript-6

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

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

最佳答案

可以通过两种方式调用 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())。

关于javascript - Array.of(n) 、 Array(n) 和 array = [n] 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34723842/

相关文章:

javascript - 使用 jasmine 测试 ajax 调用

javascript - 根据id显示/隐藏ul li

python - Numpy 将非连续数组的连续部分视为更大尺寸的 dtype

javascript - 如何获取数组 Node.js 中的最后一项?

javascript - 为什么 Javascript 不遵循关于 Infinity/NaN 比较的 ECMA 规范?

javascript - null 和 undefined 对于显式使对象不可访问是否同样有效?

javascript - IOS 上的 HTML5 音频 : how can currentTime be less than initial value?

c - 程序打印不相关的字符

javascript - 如何利用JavaScript和Node.js中的事件循环?

JavaScript-ES6 : addEventListener call a class methode with paramteter is not working