对Array.prototype.slice.call(arguments) 的认识
因为函数内部的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)方法转化为数组。