1. 程式人生 > >通過slice與call方法實現真偽陣列切換

通過slice與call方法實現真偽陣列切換

最近在研究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