我试图将函数内可访问的arguments
变量转换为数组。我尝试了两种方法:
Array.prototype.splice.apply(arguments, 0) //fails
Array.prototype.splice.call(arguments, 0) //return array
你能否详细说明为什么第一个选项失败而第二个选项成功?
答案 0 :(得分:5)
那是因为 ,正如我之前的其他人所说的那样,Array.prototype.splice.apply(arguments, 0)
(大致)等同于arguments.splice([0])
apply
期望一个数组作为其第二个参数。如果您想要检索n个第一个参数,可以Array.prototype.splice.apply(arguments, [0,n])
{(1}},它(大致)等同于arguments.splice.(0,n)
。
相反,call
适用于任何类型的参数。 Array.prototype.splice.call(arguments, 0)
(大致)等同于arguments.splice(0)
,并且由于splice
期望整数作为其第一个参数而不是数组,因此第二个解决方案有效(但不是第一个)。因此,Array.prototype.splice.apply(arguments, [0])
也可以作为Jeroen Noten的建议。
请注意"等价物"我指的是不实际工作,因为arguments
不是一个数组,而是一个类似数组的对象。
但是,您提到的技术经常用于将类似数组的对象转换为适当的数组。
编辑:我编辑了我的答案,因为它包含了一个大错误。感谢cookiemonster进行更正。