輕松學(xué)習(xí) JavaScript——第 4 部分:函數(shù)中的 arguments 對(duì)象

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)。

歡迎加入學(xué)習(xí)交流群569772982,大家一起學(xué)習(xí)交流。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 函數(shù)和對(duì)象 1、函數(shù) 1.1 函數(shù)概述 函數(shù)對(duì)于任何一門(mén)語(yǔ)言來(lái)說(shuō)都是核心的概念。通過(guò)函數(shù)可以封裝任意多條語(yǔ)句,而且...
    道無(wú)虛閱讀 4,968評(píng)論 0 5
  • 第5章 引用類(lèi)型(返回首頁(yè)) 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類(lèi)型 使用基本類(lèi)型...
    大學(xué)一百閱讀 3,691評(píng)論 0 4
  • JavaScript函數(shù)可以使用任意數(shù)量的參數(shù)。與其他語(yǔ)言(如C#和Java)不同,你可以在調(diào)用JavaScrip...
    java部落閱讀 655評(píng)論 0 0
  • ??引用類(lèi)型的值(對(duì)象)是引用類(lèi)型的一個(gè)實(shí)例。 ??在 ECMAscript 中,引用類(lèi)型是一種數(shù)據(jù)結(jié)構(gòu),用于將數(shù)...
    霜天曉閱讀 1,227評(píng)論 0 1
  • 數(shù)學(xué)課聽(tīng)不懂老師講的內(nèi)容,不知道是不是從小就怕數(shù)學(xué)的緣故導(dǎo)致了一看見(jiàn)數(shù)字就頭痛,而且我是語(yǔ)文班所以上數(shù)學(xué)課就更加肆...
    李漂亮吖閱讀 175評(píng)論 0 1

友情鏈接更多精彩內(nèi)容