7

为什么将切片方法应用于javascriptarguments值如下Array.prototype.slice.call(arguments)将其转换为数组?如果 slice 用于数组,而arguments不是数组,那么它是如何工作的?slice应用于参数时是否只是一种特殊情况?

4

2 回答 2

5

来自EcmaScript 规范Array.prototype.slice

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

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

于 2013-01-14T21:58:04.803 回答
3

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

于 2013-01-14T21:52:44.517 回答