怎样把function中的arguments变成普通数组

当我们在写一个具有处理可变长度参数的函数时,需要对arguments做一些操作。但是arguments它并不是一个数组,没有数组的各种操作,而且,JS的严格模式中不允许更改它的值。

这时我们需要将它的值拷贝到另一个地方。如果以这种方式:var a=arguments;操作的话a得到的只是一个引用,也就是浅拷贝,不能满足我们的需求。当然我们还可以:

var a=[];
for(var i=0;i<arguments.length;i++){
    a.push(arguments[i]);
}

但是,显然这种方法比较繁琐,得用循环来操作;

我们想到数组里面有一个slice方法经常用来做数组的拷贝,但是aruments没有这个方法。我们又想到可以通过call来给一个方法来指定方法的接收者;

由于aruments是一个类数组对象(有一组值和一个length属性来表示它的长度),我们可以借用数组的方法来进行操作:

var a=[].slice.call(argments);

完整代码:

function test(){
  var a=[].slice.call(arguments);
  console.log(a);
}

test(1,2,3,4,5,6);//[1,2,3,4,5,6]

这样,我们在a中进行任何操作都不会影响arguments了,而且a现在为数组,可以进行任何的数组操作了

posted @ 2014-11-06 15:50  灵瞳  阅读(343)  评论(0编辑  收藏  举报