为什么数组切片将javascript参数转换为数组

时间:2013-01-14 21:47:34

标签: javascript arrays arguments slice

为什么将切片方法应用于javascript arguments值,如下Array.prototype.slice.call(arguments)将其转换为数组?如果在数组上使用slice,并且arguments不是数组,那么这是如何工作的?将slice应用于参数时,这只是一种特殊情况吗?

2 个答案:

答案 0 :(得分:5)

来自EcmaScript specification on Array.prototype.slice

  

注意 slice函数是故意通用的;它不要求其this值为Array对象。因此,它可以转移到其他类型的对象以用作方法。 slice函数是否可以成功应用于宿主对象是依赖于实现的。

因此,slice适用于具有length属性的每个对象(如Arguments个对象)。即使对于那些不这样做的人,它只返回一个空数组。

答案 1 :(得分:3)

是的,这是一个利用参数是可枚举列表这一事实的技巧。它也适用于其他可枚举列表(例如节点列表)。