通过Arrary.prototype.slice.call浅谈类数组

来源:互联网 发布:最牛不要钱淘宝刷粉丝 编辑:程序博客网 时间:2024/06/14 07:50

首先我们要明白slice是什么 

在js中 arrary是一个类,slice是类的一个方法 从字面意思就知道是截取的意思,具体含义


 var a = [1,2,3,4,5,6,7] a.slice(1,3); //[2, 3] a.slice(4) //[5, 6, 7]

从这个简单的数组操作可以知道 slice 就是从已有的数组中返回指定的元素,但是本身没有改变数组的值,,其包含两个参数 


ArraryObject.slice(start,end)

start 必需的 从什么地方开始截取,如果是负数那么就是从后面开始计算

end 可选的 什么时候截取,如果是负数也是从尾部开始计算


这个方法我们了解了,还有call 这个讲起来就多了,所以请看另一篇文章


当你看到现在的时候估计你也明白上面的Arrary.prototype.slice.call的大概意思了 把调用的方法截取出来,,对了顺便说一句 Arrary.prototype.slice.call


 function arg(a,b,c){    var arr = Array.prototype.slice.call(arguments , 1)    console.log(arr); } arg('a','b','c'); function arrays(a,b,c){ var arrays = [].slice.call(arguments,1) console.log(arrays) } arrays('a','b','c');

说了这么多的 ‘废话’ 终于进入正题了 arguments 其实不是一个数组,他只不过是和数组类似而已,而且不能够使用数组中的方法,那么我们就可以这么理解

Arrary.prototype.slice.call 就是将类数组转化为数组


顺便多说一句 Arrary.prototype.slice.call 能够将具有length属性的对象转化为数组


var a = {length : 2,0 : '1',1:'2'}Array.prototype.slice.call(a)var b = {0 : '1',1:'2'}Array.prototype.slice.call(b)


F12自己看一下就明白了 。。

对了忘说一句 call(arguments ,1) 和 call(arguments,0) 区别就是 slice的方法中参数不同的区别



那么说到这里算是说完了 ,其实在js中有很多种方法可以将对象转化为数组的,只是很多方法简单而且很高大上而已


 一  就是上面提到的 Array.prototype.slice.call(arguments)

二    [].slice.call

  

var arr = [];for(var i = 0 ; i < ObjectArr.length ; i++){arr.push(ObjectArr[i])}

终极方案 拿去不谢

 var toArrary = function(Obj){     try{     return Array.prototype.slice.call(Obj);     }catch{     var arr = [];     for(var i = 0 ; i < Obj.length ; i++){     arr[i] = Obj[i];     // arr.push(Obj[i]);     }     return arr;     } }


原创粉丝点击