来源: 吾推网  发布时间: 2018-03-31   次浏览
2.函数中的 arguments 是数组吗?若不是,如何将它转化为真正的数组。
答:不是,arguments是伪数组(类数组),类似的还有getElementsByTagName等获取到的节点集合。
既然不是真正的数组,那就不能使用push方法了,怎样把他们转换成正在的数组呢?
arguments可以通过
方法1:
var args = Array.from(new Set(arguments));
方法2:
var args = Array.prototype.slice.call(arguments);
方法3:
var args = [].slice.call(arguments, 0);
方法4:

	
var args = []; 
for (var i = 1; i < arguments.length; i++) { 
    args.push(arguments[i]);
}
方法2,3在IE下可能会出现兼容问题,我们可以处理下
function toArr(args){
    try{
        return Array.prototype.slice.call(args);
    } catch(e){
        var arr = [];
        for(var i = 0,len = args.length; i < len; i++){
              //arr.push(args[i]);
               arr[i] = args[i];  //据说这样比push快
        }
         return arr;
    }
}