通過slice與call方法實現真偽陣列切換
阿新 • • 發佈:2018-12-05
最近在研究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