【发布时间】:2016-02-17 04:05:36
【问题描述】:
Array.from(arguments) 在某些方面比 Array.prototype.slice.call(arguments) 创建参数数组更糟糕吗?我还没有看到前者在任何地方使用过,而后者似乎是根据我读过的内容创建参数数组的标准方法。有谁能解释一下区别吗?
【问题讨论】:
标签: javascript arrays arguments
Array.from(arguments) 在某些方面比 Array.prototype.slice.call(arguments) 创建参数数组更糟糕吗?我还没有看到前者在任何地方使用过,而后者似乎是根据我读过的内容创建参数数组的标准方法。有谁能解释一下区别吗?
【问题讨论】:
标签: javascript arrays arguments
Array.from() 是 ES6 指定的从任何类数组对象或可迭代对象创建 Array 对象的方法。
var arr = Array.from(arguments)
是它的设计目的的教科书示例,旨在替代以前的解决方法,例如:
var arr = Array.prototype.slice.call(arguments)
唯一的问题是这是 ES6 功能,因此只存在于最新的浏览器中。要在许多浏览器中安全地使用它,您可以安装像 one here on MDN 这样的 polyfill,或者您可以使用 BabelJS 之类的东西将 ES6 代码转换为 ES5 兼容代码。
【讨论】:
听起来Array.from(arg) 是一个更好的方法,因为这正是这个函数应该做的。
但是,此功能是 a new standard ECMAScript 6 的一部分。根据MDN的说法,目前还不是所有浏览器都支持。
由于它是一种“实验性”功能,它仍然没有在任何地方使用。在可预见的未来,我们会看到Array.from的使用无处不在。
例如,有一些很好的功能,如:
var str = "abcdef";
if (str.startsWith('abc') && str.endsWith('def'))
但是,如果您打开具有此功能的随机网站,您将看到一个使用 RegExp 或 indexOf 的自定义自己编写的函数。原因是所有这些网站都是在引入此标准之前编写的。
同时,许多开发人员更喜欢使用旧式函数,因为所有浏览器都支持它们。引入新标准并迁移到它总是很困难。
【讨论】: