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