来源: 吾推网
发布时间: 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:
function toArr(args){
答:不是,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;
}
}