最近在研究JQuery代码,发现JQuery实现真伪数组的代码十分巧妙;
伪数组转为真数组的实现代码比较简单,如下:
let obj={};
let arr=[1,2,3,4,4,5];
//通过[].push找到数组中push方法
//通过apply修改this的指向
//将arr的值赋给该对象
//将真数组转化为伪数组
[].push.apply(obj,arr);
console.log(obj);
初,那么来到真数组转为伪数组,起初以为真数组转化为伪数组,只需要在apply参数中,调换真伪数组参数的位置就可以了。
但是后来发现在IE8中,是不支持通过[].push.apply(arr,obj)这种方法的。
虽然说IE8比较菜,但是还是得兼容,怎么办?
就想到了通过数组中的slice方法来进行操作,slice方法,注意其有两个参数,第一个是起始位置,第二个是末尾位置,分割时候是不包括末尾位置的;如果我们不传参,会返回一个新的数组;
这不就对了吗?我需要的就是返回一个新的数组!
let arr1=[1,2,333,44];
[].slice.apply(arr1);
console.log(arr1);
console.log(typeof arr1);//object