为什么将切片方法应用于javascript arguments
值,如下Array.prototype.slice.call(arguments)
将其转换为数组?如果在数组上使用slice,并且arguments
不是数组,那么这是如何工作的?将slice
应用于参数时,这只是一种特殊情况吗?
答案 0 :(得分:5)
来自EcmaScript specification on Array.prototype.slice
:
注意
slice
函数是故意通用的;它不要求其this
值为Array对象。因此,它可以转移到其他类型的对象以用作方法。slice
函数是否可以成功应用于宿主对象是依赖于实现的。
因此,slice
适用于具有length
属性的每个对象(如Arguments
个对象)。即使对于那些不这样做的人,它只返回一个空数组。
答案 1 :(得分:3)
是的,这是一个利用参数是可枚举列表这一事实的技巧。它也适用于其他可枚举列表(例如节点列表)。