Javascript中將函數參數arguments轉為數組


1. arguments為什么不是數組?如何證明?

arguments 是沒有數組的slice等方法的,所以不是Array類型的。

驗證:

function testargs(){
    var arr=[1,2,3];
    console.log(typeof arguments.slice);
    console.log(typeof arr.slice);
}
testargs();

輸出:

undefined
function

當然,還可以通過其他方式來證明,比如說看constructor等等。

2. 如何轉為數組?

使用Array的slice方法,如下:

function arg2arr(){
    var arr = Array.prototype.slice.call(arguments);
    console.log(arr);
}
arg2arr(1,2,3);

輸出:[1,2,3]

還可以寫成這樣:

Array.prototype.slice.call(arguments, 0)

3. 如何使用原生JS實現自己的slice方法

      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;
 }

4. JS中有沒有toArray方法?如果沒有,如何自己實現一個?

var toArray = function(s){
     try{
         return Array.prototype.slice.call(s);
     } catch(e){
             var arr = [];
             for(var i = 0,len = s.length; i < len; i++){
                 //arr.push(s[i]);
                   arr[i] = s[i];  //據說這樣比push快
             }
              return arr;
     }
 }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM