【问题标题】:What's is the difference between Array.of(n) , Array(n) and array = [n]?Array.of(n) 、 Array(n) 和 array = [n] 有什么区别?
【发布时间】:2016-04-15 21:33:22
【问题描述】:

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

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

【问题讨论】:

  • 我已经看过了,也许我的问题不清楚我正在寻找用例的实用解释,而不是简单的文档剪切和粘贴。 @AmmarCSE 无论如何谢谢你

标签: javascript arrays ecmascript-6


【解决方案1】:

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]

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • @thefourtheye 哦,你是对的 :) 我必须通过制作.apply() 的绑定版本(到.of)然后将它绑定到Array 来做到这一点对于一个毫无意义的例子来说有点太奇怪了。
    • 我们甚至可以在您的答案中添加一些参考链接,以使其更加完整。 this 之类的东西似乎很有用 @Pointy
    • 好主意。还值得注意的是,截至目前 InternetExplorer 不支持新的 ES2015 方法。
    • 明天将不再支持 IE :)
    • @StefanoSaitta 对,但 Edge 也不支持这些功能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-28
    • 2016-05-03
    • 1970-01-01
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多