您的位置:首页 > 其它

对Array.prototype.slice.call(arguments) 的认识

2015-12-08 18:28 429 查看
因为函数内部的arguments是伪数组,为了将其转化为真正的数组,经常看到的方法是 Array.prototype.slice.call(arguments)。

someArray.slice(start,end)方法用于从数组中截取子数组,如果someArray.slice()中不传入参数,则返回someArray的一个拷贝。

可猜想Array.prototype.slice方法的内部实现原理如下:

Array.prototype.slice = function(start,end){
var temp = new Array();
if(arguments.length == 0){
start = 0;
end = this.length;
}else if(arguments.length ==1){
end = this.length;
}
for(var i=0,len=this.length;i<len;i++){
if(i>=start && i<end){
temp[i] = this[i];
}
}
return temp;
}


以上代码未对数据进行有效性验证。

可猜想slice方法可将符合结构{0:ele1,1:ele2,2:ele3,length:num}的对象转化为数组,实验代码如下:

var obj = {0:"value0",1:"value1",2:"value2",length:3};
var objArr = Array.prototype.slice.call(obj);
console.log(objArr);


控制台输出["value0", "value1", "value2"]

因为arguments具有length属性,并且能够通过数字下标的方式获取参数,所以能通过Array.prototype.slice.call(arguments)方法转化为数组。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: