【问题标题】:Convert Array-like objects, Array.prototype.slice or Array.from转换类数组对象,Array.prototype.slice 或 Array.from
【发布时间】:2016-08-27 23:54:15
【问题描述】:

我知道有两种方法可以将类数组对象转换为数组。

  1. Array.prototype.slice.call(arguments)
  2. Array.from(arguments)

我想知道它们之间有什么区别,我应该使用哪一个来转换类似数组的对象。

【问题讨论】:

  • Browser compatibility而言,使用Array.prototype.slice.call(arguments)(虽然Polyfill可用...)
  • [...arguments]
  • 但是在旧的 IE 8 及更低版本中要小心。如果宿主对象作为 this 传递给内置方法(例如,将 HTML 集合作为 this 传递给 slice)你会得到一个错误。但是,如果您有一个用于 from 的 polyfill,那将不是问题。

标签: javascript


【解决方案1】:

Array.prototype.slice.call 是一种将类数组对象转换为数组的长期机制。如果您正在寻找浏览器兼容性,请使用此功能(尽管在某些较旧的浏览器(如 IE8 及以下版本)上似乎根本无法使用)。

Array.from 于 2015 年 6 月引入 ECMA6。它完成了与之前的机制相同的事情,只是以更流畅和简洁的方式。另外Array.from可以将更多的结构体转化为生成器等数组。

了解array.from

【讨论】:

  • 其实Array.from完成了更多,因为它可以将生成器变成数组等
  • 作为记录,ECMA-262 是标准的名称(所有版本)。 ECMAScript 是语言的名称。 Edition 6 是 ECMA-262 的当前版本,它的简称是 ECMAScript 2015
【解决方案2】:

Array.prototype.slice.call(arguments) 在许多浏览器中的运行速度都比Array.from(arguments) 快。

您可以在这里查看results

【讨论】:

  • 它的速度也非常惊人。而且它只会在新版 Chrome 中变得更快。
【解决方案3】:

如果您希望您的代码具有可移植性,请使用第一种方法。第二种方法是 ECMAscript 6 的一部分,因此在一系列浏览器中都没有得到很好的支持。

【讨论】:

    【解决方案4】:

    slice 适用于任何具有长度属性的东西,而参数很方便。

    Array.from 简单地将类 Array 或 Iterable 对象转换为 Array 实例。

    很遗憾,Array.from 和 Rest 参数目前仅在较新版本的 Firefox 和 Google Chrome 中实现

    请参考link

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-14
      • 2012-02-18
      • 2021-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-11
      • 1970-01-01
      相关资源
      最近更新 更多