我正在尝试将函数内可访问的 arguments
变量转换为数组。我尝试了两种方法:
Array.prototype.splice.apply(arguments, 0) //fails
Array.prototype.splice.call(arguments, 0) //return array
请问你们能否详细说明第一种选项失败的原因而第二种选项成功的原因?
我正在尝试将函数内可访问的 arguments
变量转换为数组。我尝试了两种方法:
Array.prototype.splice.apply(arguments, 0) //fails
Array.prototype.splice.call(arguments, 0) //return array
Array.prototype.splice.apply(arguments, 0)
arguments.splice([0])
,正如其他人之前所说的,apply
期望其第二个参数为数组。如果您想要检索前 n 个参数,则可以执行 Array.prototype.splice.apply(arguments, [0,n])
,这大致相当于 arguments.splice.(0,n)
。call
可以使用任何类型的参数。 Array.prototype.splice.call(arguments, 0)
大致相当于 arguments.splice(0)
,由于 splice
期望其第一个参数为整数而不是数组,因此第二种解决方案可行(但第一种解决方案不可行)。因此,Array.prototype.splice.apply(arguments, [0])
也可以像 Jeroen Noten 建议的那样工作。arguments
不是数组,而是类似数组的对象。splice
。 - Bergi.call
,.apply
)作为等价物。对于直接调用,该方法需要直接放置在“arguments”对象上。 - cookie monster
.apply()
的第二个参数应该是一个数组,例如[0]
。 - Pointycall
和apply
之间的主要区别。 - AndyArray.prototype.splice.apply(arguments, [0])
应该可以工作。apply()
和call()
是不同的! - Jeroen NotenFunction.prototype.apply: argumentsArray 不是类似数组的对象
(或类似此类)应该足够清晰,或者至少告诉您要查看文档。 - Bergi