对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)方法转化为数组。

posted @ 2015-12-08 18:28  比昂  阅读(116)  评论(0编辑  收藏  举报