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

首先我们要明白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;
     }
 }


你可能感兴趣的:(js)