JavaScript函數(shù)具有像數(shù)組一樣的對(duì)象,這些對(duì)象稱(chēng)為arguments,與傳遞給函數(shù)的參數(shù)相對(duì)應(yīng)。傳遞給JavaScript函數(shù)的所有參數(shù)都可以使用arguments對(duì)象來(lái)引用。
現(xiàn)在我們開(kāi)始學(xué)習(xí),仔細(xì)看下面列出的代碼:
function add(num1, num2) {
var res = num1 + num2;
return res;
}
var r = add(7, 8);
console.log(r);
在上面的函數(shù)中,num1和num2是兩個(gè)參數(shù)。你可以使用名為num1和num2的arguments來(lái)引用這些參數(shù)。除了arguments名稱(chēng)之外,你還可以使用JavaScript數(shù)組,如對(duì)象arguments來(lái)引用它們。所以,上面的函數(shù)可以重寫(xiě),如下所示:
function add(num1, num2) {
var res = arguments[0] + arguments[1];
return res;
}
var r = add(7, 8);
console.log(r);
在JavaScript函數(shù)中,arguments對(duì)象用于訪(fǎng)問(wèn)或引用傳遞給函數(shù)的所有參數(shù)。arguments對(duì)象是可用于函數(shù)的局部變量。arguments對(duì)象的長(zhǎng)度相當(dāng)于傳遞給函數(shù)的arguments數(shù)量。請(qǐng)看下面的代碼,作為輸出將得到2,因?yàn)橛袃蓚€(gè)arguments傳遞給函數(shù):
function add(num1, num2) {
var res = arguments.length;
return res;
}
var r = add(7, 8);
console.log(r);
arguments對(duì)象不是純數(shù)組
JavaScript的arguments對(duì)象不是純粹的JavaScript數(shù)組。你不能對(duì)arguments對(duì)象執(zhí)行諸如push,pop,slice等操作。正如你將在下面列出的代碼中所看到的那樣,執(zhí)行push操作會(huì)引發(fā)異常,因?yàn)閍rguments.push不是函數(shù)。
function add(num1, num2) {
arguments.push(78);
var res = num1 + num2;
return res;
}
可以設(shè)置arguments對(duì)象
你可以在arguments對(duì)象數(shù)組中設(shè)置特定的項(xiàng)。首先,你可以使用索引0設(shè)置數(shù)組的第一個(gè)項(xiàng),如下所示:
function add(num1, num2) {
arguments[0] = 15;
var res = num1 + num2;
return res;
}
var r = add(7, 8);
console.log(r);
在add函數(shù)中,num1和arguments[0]引用相同的值。所以,當(dāng)你更新arguments[0]時(shí),num1的值也會(huì)被更新。對(duì)于上面的代碼,輸出將是23。
將arguments對(duì)象轉(zhuǎn)換為數(shù)組
正如我們?cè)谶@篇文章中介紹的那樣,JavaScript函數(shù)arguments對(duì)象不是純數(shù)組。除了長(zhǎng)度屬性外,它沒(méi)有任何其他屬性。但是,你可以使用Array.prototype.slice.call將arguments對(duì)象轉(zhuǎn)換為數(shù)組,如下所示:
function add(num1, num2) {
var arg = Array.prototype.slice.call(arguments);
console.log(arg.pop());
}
在ECMAScript 6中,你可以將arguments對(duì)象轉(zhuǎn)換為一個(gè)數(shù)組,如下所示:
function add(num1, num2) {
var arg = Array.from(arguments);
console.log(arg.pop());
}
結(jié)論
總而言之,關(guān)于arguments對(duì)象需要謹(jǐn)記的一些重要事情有:
- arguments對(duì)象的長(zhǎng)度等于傳遞給函數(shù)的參數(shù)的數(shù)量。
- arguments對(duì)象是類(lèi)似數(shù)組的對(duì)象,但不是JavaScript數(shù)組。
- 你不能對(duì)arguments對(duì)象使用其他JavaScript數(shù)組方法,例如push,pop,slice等等。
- JavaScript arguments對(duì)象索引從零開(kāi)始。所以第一個(gè)參數(shù)將被arguments[0]引用,第二個(gè)參數(shù)將被arguments[1]引用,等等。
簡(jiǎn)單地說(shuō),JavaScript arguments對(duì)象是一個(gè)類(lèi)似數(shù)組的對(duì)象,它引用傳遞給函數(shù)的參數(shù)。在ECMAScript 6中,引入的rest參數(shù)現(xiàn)已被廣泛用來(lái)替代函數(shù)中的arguments對(duì)象用于變量數(shù)或參數(shù)。
在這個(gè)“輕松JavaScript”系列的下一篇文章中,我們將介紹JavaScript函數(shù)中的類(lèi)。