JavaScript函數(shù)具有像數(shù)組一樣的對象,這些對象稱為arguments,與傳遞給函數(shù)的參數(shù)相對應。傳遞給JavaScript函數(shù)的所有參數(shù)都可以使用arguments對象來引用。
eg:
function add(num1, num2) {
var res = num1 + num2;
return res;
}
var r = add(7, 8);
console.log(r);//結果是15
在上面的函數(shù)中,num1和num2是兩個參數(shù)。你可以使用名為num1和num2的arguments來引用這些參數(shù)。除了arguments名稱之外,你還可以使用JavaScript數(shù)組,如對象arguments來引用它們。所以,上面的函數(shù)可以重寫,eg:
function add(num1, num2) {
var res = arguments.length;
return res;
}
var r = add(7, 8);
console.log(r);//結果是15
在JavaScript函數(shù)中,arguments對象用于訪問或引用傳遞給函數(shù)的所有參數(shù)。arguments對象是可用于函數(shù)的局部變量。arguments對象的長度相當于傳遞給函數(shù)的arguments數(shù)量。請看下面的代碼,作為輸出將得到2,因為有兩個arguments傳遞給函數(shù):
function add(num1, num2) {
var res = arguments.length;
return res;
}
var r = add(7, 8);
console.log(r);//結果是2
arguments對象不是純數(shù)組
JavaScript的arguments對象不是純粹的JavaScript數(shù)組。你不能對arguments對象執(zhí)行諸如push,pop,slice等操作。正如你將在下面列出的代碼中所看到的那樣,執(zhí)行push操作會引發(fā)異常,因為arguments.push不是函數(shù)。但是,你可以在arguments對象數(shù)組中設置特定的項。首先,你可以使用索引0設置數(shù)組的第一個項:
function add(num1, num2) {
arguments[0] = 15;//num1的值被更新
var res = num1 + num2;//15+8
return res;
}
var r = add(7, 8);
console.log(r);//輸出結果是23
將arguments對象轉換為數(shù)組
正如我們在這篇文章中介紹的那樣,JavaScript函數(shù)arguments對象不是純數(shù)組。除了長度屬性外,它沒有任何其他屬性。但是,你可以使用Array.prototype.slice.call將arguments對象轉換為數(shù)組,如下所示:
function add(num1, num2) {
var arg = Array.prototype.slice.call(arguments);
console.log(arg); // 結果是[7, 8]
console.log(arg.pop());// pop()方法用于刪除并返回數(shù)組的最后一個元素。結果是 8
console.log(arg); // 結果是[7]
}
var r = add(7, 8);
注意:
- arguments對象的長度等于傳遞給函數(shù)的參數(shù)的數(shù)量。
- arguments對象是類似數(shù)組的對象,但不是JavaScript數(shù)組。
- 你不能對arguments對象使用其他JavaScript數(shù)組方法,例如push,pop,slice等等。
- JavaScript arguments對象索引從零開始。所以第一個參數(shù)將被arguments[0]引用,第二個參數(shù)將被arguments[1]引用,等等。
簡單地說,JavaScript arguments對象是一個類似數(shù)組的對象,它引用傳遞給函數(shù)的參數(shù)。在ECMAScript 6中,引入的rest參數(shù)現(xiàn)已被廣泛用來替代函數(shù)中的arguments對象用于變量數(shù)或參數(shù)。