JS 'arguments' 对象如何转换为数组

How JS 'arguments' object gets converted to array

正在寻找有关执行以下操作时究竟发生了什么的更多详细信息:

    function useArray(){
        var args = [].slice.call(arguments)
        console.log(args)
    }

为什么 slice 是一个具有 3 个参数(源数组、要复制的开始和结束位置)的函数会威胁 arguments 正确?方法 call 需要第一个参数的正确值作为 this 但似乎 arguments 变成了 Array 对象?

为什么这不起作用:

var args = [].slice(arguments)

我们正在使用 [].slice 获取 Array::slice 方法。 arguments 没有自己的 slice(),但它 类数组。

虽然它是 Array 的成员,但 slice() 在类似数组的对象上工作得很好 -- 具有 .length 并且可以用 [0..n] 索引的对象.

slice() 不带参数 returns 整个数组的副本。它的参数都是可选的。

所以就好像 arguments 一个 slice() 方法,我们调用 arguments.slice() 来获取它的一个副本(作为数组).

[].slice(arguments) 只是在空数组上调用 Array::slice()arguments 作为 begin 参数,这没有意义,因为 begin(如果present) 应该是一个数字。