JavaScript arguments 物件

admin發表於2018-08-17

arguments是一個特殊物件,不用且不能由程式設計師主動建立。

函式被呼叫時,此物件會自動建立,程式碼例項如下:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
function func(x,y){
  for(var index=0;index<arguments.length;index++){
    console.log(arguments[index]);
  }
}
func(1, 2, 3, 4)

依次列印1,2,3,4四個引數,解析如下:

(1).儲存了實際傳入函式的引數。

(2).與陣列類似,可以使用索引訪問其中引數或者length返回引數數量。

關於形參和實參可以參閱JavaScript函式形參或者實參一章節。

利用arguments物件可以實現一些驗證功能,比如對函式傳入的引數數目限制。

如果傳入的數量與期望數目不同,則報錯。

程式碼例項如下:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
function func() {
    if( arguments.length == 2 ){        
        return arguments[0] + arguments[1];
    }else{        
        return '引數數目錯誤';
    }
}
console.log(func(2,4,6));

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201809/14/171220b4w4stg1gwal9d64.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

程式碼分析如下:

(1).函式期望傳入2個引數。

(2).呼叫函式後,arguments物件儲存實際傳入的引數(2,4,6)。

(3).arguments.length屬性獲取實際傳入引數的數量,判斷傳入的數量是否兩個,如果是兩個引數,那將兩個引數相加,並返回它們的和,如果傳入引數的數量不是兩個,則返回"引數數目錯誤"。

(4).引數可以通過與陣列相同的方式訪問,arguments[0]返回從左邊數第一個引數,arguments[1]返回從左邊起第二個引數,以此類推。

是陣列還是物件:

在前面已經介紹,arguments是物件,但非常類似於陣列:

(1).可以使用索引訪問其中儲存的資料。

(2).使用length屬性返回儲存資料的數目。

但它並非是陣列,證明這一點非常簡單,如果是陣列,那麼肯定可以使用陣列物件的方法。

程式碼例項如下:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
function func(x,y){
  arguments.push(5)
}
func(1, 2, 3, 4)

上面程式碼報錯,因為arguments物件並不是陣列,所以沒有push方法。

將arguments轉換為陣列:

非常簡單,程式碼例項如下:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
function func(x,y){
  let arr=Array.prototype.slice.apply(arguments);
  arr.push(5);
  console.log(arr);
}
func(1, 2, 3, 4)

上面程式碼將arguments物件轉換為陣列,更多內容參閱如下文章:

(1).prototype參閱JavaScript prototype一章節。

(2).apply()參閱JavaScript appy()方法一章節。

(3).slice()參閱JavaScript slice()方法一章節。

相關文章