伪数组的实现方法
1、伪数组通过Array.prototype.slice转换为真正的数组带有length属性的对象
语法:Array.prototype.slice.call(fakeArray) 将数组转变为真正的Array对象
var fakeArray01={0:'a' ,1:'b',length:2};
var arr01=Array.prototype.slice.call(fakeArray01);
alert(arr01[0]); //a
var arr02 =[ ].slice.call(fakeArray01);
alert(arr02[0]); //a
slice可以用来获取数组片段,它返回新数组,不会修改原数组。
2、伪数组的实现
var fakeArray01={a:'a',b:'b',length:2}; //没有length下标对应的值
var arr01=Array.prototype.slice.call(fakeArray01);
alert(arr01[0]); //undefined
var fakeArray02={0:'a',1:'b',length:'num'}; //length
var arr02=Array.prototype.slice.call(fakeArray02);
alert(arr02[1]); //undefined
slice内部实现
Array.prototype.slice = function(start,end){ var result = new Array(); start = start || 0; end = end || this.length; //this指向调用的对象,当用了call后,能够改变this的指向,也就是指向传进来的对象,这是关键 for(var i = start; i < end; i++){ result.push(this[i]); } return result;}
可以看出,slice并不需要this为array类型,只需要有length属性即可。并且length属性可不为number类型,当不可转换为数值时,end返回0.