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