JavaScript函數具備像數組同樣的對象,這些對象稱爲arguments,與傳遞給函數的參數相對應。傳遞給JavaScript函數的全部參數均可以使用arguments對象來引用。數組
如今咱們開始學習,仔細看下面列出的代碼:函數
function add(num1, num2) {學習
var res = num1 + num2;spa
return res;prototype
}rest
var r = add(7, 8);對象
console.log(r);索引
在上面的函數中,num1和num2是兩個參數。你可使用名爲num1和num2的arguments來引用這些參數。除了arguments名稱以外,你還可使用JavaScript數組,如對象arguments來引用它們。因此,上面的函數能夠重寫,以下所示:ip
function add(num1, num2) {io
var res = arguments[0] + arguments[1];
return res;
}
var r = add(7, 8);
console.log(r);
在JavaScript函數中,arguments對象用於訪問或引用傳遞給函數的全部參數。arguments對象是可用於函數的局部變量。arguments對象的長度至關於傳遞給函數的arguments數量。請看下面的代碼,做爲輸出將獲得2,由於有兩個arguments傳遞給函數:
function add(num1, num2) {
var res = arguments.length;
return res;
}
var r = add(7, 8);
console.log(r);
arguments對象不是純數組
JavaScript的arguments對象不是純粹的JavaScript數組。你不能對arguments對象執行諸如push,pop,slice等操做。正如你將在下面列出的代碼中所看到的那樣,執行push操做會引起異常,由於arguments.push不是函數。
function add(num1, num2) {
arguments.push(78);
var res = num1 + num2;
return res;
}
能夠設置arguments對象
你能夠在arguments對象數組中設置特定的項。首先,你可使用索引0設置數組的第一個項,以下所示:
function add(num1, num2) {
arguments[0] = 15;
var res = num1 + num2;
return res;
}
var r = add(7, 8);
console.log(r);
在add函數中,num1和arguments[0]引用相同的值。因此,當你更新arguments[0]時,num1的值也會被更新。對於上面的代碼,輸出將是23。
將arguments對象轉換爲數組
正如咱們在這篇文章中介紹的那樣,JavaScript函數arguments對象不是純數組。除了長度屬性外,它沒有任何其餘屬性。可是,你可使用Array.prototype.slice.call將arguments對象轉換爲數組,以下所示:
function add(num1, num2) {
var arg = Array.prototype.slice.call(arguments);
console.log(arg.pop());
}
在ECMAScript 6中,你能夠將arguments對象轉換爲一個數組,以下所示:
function add(num1, num2) {
var arg = Array.from(arguments);
console.log(arg.pop());
}
結論
總而言之,關於arguments對象須要謹記的一些重要事情有:
arguments對象的長度等於傳遞給函數的參數的數量。
arguments對象是相似數組的對象,但不是JavaScript數組。
你不能對arguments對象使用其餘JavaScript數組方法,例如push,pop,slice等等。
JavaScript arguments對象索引從零開始。因此第一個參數將被arguments[0]引用,第二個參數將被arguments[1]引用,等等。
簡單地說,JavaScript arguments對象是一個相似數組的對象,它引用傳遞給函數的參數。在ECMAScript 6中,引入的rest參數現已被普遍用來替代函數中的arguments對象用於變量數或參數。