JavaScript参数对象MDN指南

时间:2016-02-25 17:16:04

标签: javascript arguments

有人能详细解释这行代码中的每个术语实际上做了什么吗?我知道这是将arguments对象转换为一个真正的数组,但我不明白它是如何做的。

   var args = (arguments.length === 1?[arguments[0]]:Array.apply(null, arguments));

1 个答案:

答案 0 :(得分:-1)

function someFunc() {
    var args = Array.prototype.slice.call(arguments);
    return args;
}
someFunc(1,2,3);  //[1, 2, 3]

arguments对象是每个函数本地的类数组对象(不是数组),并且包含传递给函数的每个参数的条目。

在上文中,我们使用Array.prototype来创建数组的实例。它也可以这样写var args = [].slice.call(arguments);

然后我们使用slice()方法。只要将方法绑定到对象,Slice就可以用于类似数组的对象(在本例中是我们的arguments对象)。对于这种情况下的绑定,我们使用call()。您还可以使用其他绑定函数,例如apply()

call()方法接收arguments对象,即为this提供的slice()值。

值得注意的是,在EcmaScript 2015中,可以使用Rest parametersspread operator以更简单的方式完成此操作。以下是ES2015的等效内容:

function someFunc(...args) {
    return args;
}
someFunc(1,2,3);  //[1, 2, 3]