在js中碰到关于真伪数组转换的问题,我们经常使用数组原型对象上push方法,再用call或者apply方法来修改this指针从而达到真伪数组转换的目的
真数组转化为伪数组:
var obj = {};
var arr = [1,3,5];
[].push.apply(obj,arr);
console.log(obj);
结果是
伪数组转换为真数组:
var arr = [];
var obj = {
0:'邵蒙蒙',
1:25,
2:'女',
length:3
};
[].push.apply(arr,obj);
console.log(arr);
结果
但是注意:一般浏览器可以把系统自带的伪数组以及自定义的伪数组转化成真的数组,但是在ie8及其以下版本,在ie8以及以下不能通过apply方法把对应的自定义的伪数组转化成对应的值,所以我们可以先把伪数组转化成真的数组,然后通过apply方法来设置
slice方法如果不传递任何参数,会把原来的数组返回
var arr = [1,3,5];
console.log(arr.slice());
结果
采用slice方法将自定义的伪数组转换为真数组
var obj = {
0:'邵蒙蒙',
1:25,
2:'女',
length:3
};
var arr = [].slice.call(obj);
console.log(arr);
结果