【问题标题】:Is it necessary to convert arguments to Array before calling apply?在调用 apply 之前是否需要将参数转换为 Array?
【发布时间】:2012-09-22 17:17:03
【问题描述】:

是否有任何浏览器限制或任何其他问题阻止我这样做:

fn.apply(this, arguments);

对比:

fn.apply(this, Array.prototype.slice.call(arguments));

我知道apply 将“真”Array 作为第二个参数,但传递参数集合似乎同样有效。还是……?

【问题讨论】:

    标签: javascript arrays arguments apply


    【解决方案1】:

    支持是 MDN 上的unknown

    已知只有 Firefox 接受 Function.prototype.apply() 的第二个参数的类数组对象。在直接通过arguments 之前,我会谨慎行事。

    【讨论】:

      【解决方案2】:

      根据MDN,它“使用给定的 this 值和作为数组(或类似对象的数组)提供的参数调用函数”。鉴于arguments 是一个类数组对象,使用它应该没有任何限制。

      事实上,description 明确表示arguments 是一个有效参数。

      【讨论】:

      • 我也是这么认为的,但我在这么多“专业”代码示例中不断看到Array.prototype.slice.call(arguments),我认为一定有一个正当的理由......
      • 如果你想对它们进行 Array 操作,例如 append、shift 或 push,这是必要的,所以我认识的大多数开发人员这样做更多是出于习惯。
      猜你喜欢
      • 2014-03-15
      • 1970-01-01
      • 2018-06-09
      • 2015-09-12
      • 1970-01-01
      • 1970-01-01
      • 2012-10-01
      • 2011-03-08
      相关资源
      最近更新 更多