偽數(shù)組的實(shí)現(xiàn)方法
1拌屏、偽數(shù)組通過Array.prototype.slice轉(zhuǎn)換為真正的數(shù)組帶有l(wèi)ength屬性的對(duì)象
語法:Array.prototype.slice.call(fakeArray) 將數(shù)組轉(zhuǎn)變?yōu)檎嬲腁rray對(duì)象
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可以用來獲取數(shù)組片段,它返回新數(shù)組,不會(huì)修改原數(shù)組。
2、偽數(shù)組的實(shí)現(xiàn)
var fakeArray01={a:'a',b:'b',length:2}; //沒有l(wèi)ength下標(biāo)對(duì)應(yīng)的值
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內(nèi)部實(shí)現(xiàn)
Array.prototype.slice = function(start,end){ var result = new Array(); start = start || 0; end = end || this.length; //this指向調(diào)用的對(duì)象珍手,當(dāng)用了call后,能夠改變this的指向,也就是指向傳進(jìn)來的對(duì)象琳要,這是關(guān)鍵 for(var i = start; i < end; i++){ result.push(this[i]); } return result;}
可以看出寡具,slice并不需要this為array類型,只需要有l(wèi)ength屬性即可稚补。并且length屬性可不為number類型童叠,當(dāng)不可轉(zhuǎn)換為數(shù)值時(shí),end返回0.