詳解JavaScript中Arguments對(duì)象用途
在實(shí)際開(kāi)發(fā)中,Arguments 對(duì)象非常有用。靈活使用 Arguments 對(duì)象,可以提升使用函數(shù)的靈活性,增強(qiáng)函數(shù)在抽象編程中的適應(yīng)能力和糾錯(cuò)能力。
JavaScript 中 Arguments 對(duì)象的用途總結(jié)。
前言
相信我們很多人在代碼開(kāi)發(fā)的過(guò)程中都使用到過(guò)一個(gè)特殊的對(duì)象 —— Arguments 對(duì)象。
在實(shí)際開(kāi)發(fā)中,Arguments 對(duì)象非常有用。靈活使用 Arguments 對(duì)象,可以提升使用函數(shù)的靈活性,增強(qiáng)函數(shù)在抽象編程中的適應(yīng)能力和糾錯(cuò)能力。
那么 Arguments 對(duì)象到底該怎么用呢?今天我們就來(lái)總結(jié)一下。

Arguments 的基本概念
Arguments 是一個(gè)對(duì)應(yīng)于傳遞給函數(shù)的參數(shù)的類(lèi)數(shù)組對(duì)象。

Arguments 是個(gè)類(lèi)似數(shù)組但不是數(shù)組的對(duì)象,說(shuō)它類(lèi)似數(shù)組是因?yàn)槠渚邆鋽?shù)組相同的訪問(wèn)性質(zhì)及方式,能夠由 arguments[n] 來(lái)訪問(wèn)對(duì)應(yīng)的單個(gè)參數(shù)的值,并擁有數(shù)組長(zhǎng)度屬性 length。還有就是 Arguments 對(duì)象存儲(chǔ)的是實(shí)際傳遞給函數(shù)的參數(shù),而不局限于函數(shù)聲明所定義的參數(shù)列表,而且不能顯式創(chuàng)建 Arguments 對(duì)象。
下面是一個(gè)簡(jiǎn)單使用 Arguments 的示例:
function func1(a, b, c) {
console.log(arguments[0]);
console.log(arguments[1]);
console.log(arguments[2]);
}
func1(1, 2, 3);
// 1
// 2
// 3
我們可以在函數(shù)內(nèi)部,直接通過(guò) arguments 來(lái)獲取所傳入的參數(shù)集合,然后以數(shù)組的獲值形式獲取對(duì)應(yīng)位置的參數(shù)值。
Arguments 的作用
作為 JavaScript 中的一個(gè)特殊對(duì)象,Arguments 具有哪些用途,或者說(shuō)是該怎么用呢?
獲取實(shí)參和形參的個(gè)數(shù)
使用 arguments.length 屬性可以獲取函數(shù)的實(shí)參個(gè)數(shù)。使用函數(shù)對(duì)象的 length 屬性可以獲取函數(shù)的形參個(gè)數(shù),該屬性為只讀屬性,在函數(shù)體內(nèi)、體外都可以使用。
下面示例設(shè)計(jì)一個(gè) checkArg() 函數(shù),用來(lái)檢測(cè)一個(gè)函數(shù)的形參和實(shí)參是否一致,如果不一致則拋出異常。
function checkArg(a) {
//檢測(cè)函數(shù)實(shí)參與形參是否一致
if (a.length != a.callee.length)
//如果實(shí)參與形參個(gè)數(shù)不同,則拋出錯(cuò)誤
throw new Error("實(shí)參和形參不一致");
}
function f(a, b) {
//求兩個(gè)數(shù)的平均值
checkArg(arguments); //根據(jù)arguments來(lái)檢測(cè)函數(shù)實(shí)參和形參是否一致
return ((a * 1 ? a : 0) + (b * 1 ? b : 0)) / 2; //返回平均值
}
console.log(f(6)); //拋出異常。調(diào)用函數(shù)f,傳入一個(gè)參數(shù)
修改實(shí)參值
在下面示例中使用 for 循環(huán)遍歷 arguments 對(duì)象,然后把循環(huán)變量的值傳入 arguments,以便于改變實(shí)參值。
function f() {
for (let i = 0; i < arguments.length; i++) { //遍歷arguments對(duì)象
arguments[i] = i; //修改每個(gè)實(shí)參的值
console.log(arguments[i]); //提示修改的實(shí)參值
}
}
f(3, 3, 6); //返回提示0、1、2,而不是3、3、6
改變實(shí)參的個(gè)數(shù)
通過(guò)修改 length 屬性值,也可以改變函數(shù)的實(shí)參個(gè)數(shù)。當(dāng) length 屬性值增大時(shí),則增加的實(shí)參值為 undefined;如果 length 屬性值減小,則會(huì)丟棄 length 長(zhǎng)度值之后的實(shí)參值。
function f() {
arguments.length = 2; //修改arguments屬性對(duì)象的length屬性值
for (let i = 0; i < arguments.length; i++) {
console.log(arguments[i]);
}
}
f(3, 3, 6); //返回提示3、3
檢測(cè)參數(shù)合法性
在下面示例中,使用 arguments.callee 獲取匿名函數(shù),然后通過(guò)函數(shù)的 length 屬性獲取函數(shù)形參個(gè)數(shù),最后比較實(shí)參個(gè)數(shù)與形參個(gè)數(shù),以檢測(cè)用戶(hù)傳遞的參數(shù)是否符合要求。
function f(x,y,z) {
let a = arguments.length; //獲取函數(shù)實(shí)參的個(gè)數(shù)
let b = arguments.callee.length; //獲取函數(shù)形參的個(gè)數(shù)
if (a != b){ //如果實(shí)參和形參個(gè)數(shù)不相等,則提示錯(cuò)誤信息
throw new Error("傳遞的參數(shù)不匹配");
}else { //如果實(shí)參和形參個(gè)數(shù)相同,則返回它們的和
return x + y + z;
}
}
console.log(f(3,4,5)); //返回值12
arguments.callee 等價(jià)于函數(shù)名,在上面示例中,arguments.callee 等于 f。
函數(shù)的參數(shù)個(gè)數(shù)不確定時(shí),用于訪問(wèn)調(diào)用函數(shù)的實(shí)參值
如果函數(shù)的參數(shù)個(gè)數(shù)不確定,或者函數(shù)的參數(shù)個(gè)數(shù)很多,而又不想逐一定義每一個(gè)形參,則可以省略定義參數(shù),直接在函數(shù)體內(nèi)使用 Arguments 對(duì)象來(lái)訪問(wèn)調(diào)用函數(shù)的實(shí)參值。
下面示例定義一個(gè)求平均值的函數(shù),該函數(shù)借助 arguments 對(duì)象來(lái)計(jì)算參數(shù)的平均值。在調(diào)用函數(shù)時(shí),可以傳入任意多個(gè)參數(shù)。
function avg() {
//求平均值
let num = 0;
let length = 0; //聲明并初始化臨時(shí)變量
for (let i = 0; i < arguments.length; i++) {
//遍歷所有實(shí)參
if (typeof arguments[i] != "number") {
//如果參數(shù)不是數(shù)值
continue; //則忽略該參數(shù)值
}
num += arguments[i]; //計(jì)算參數(shù)的數(shù)值之和
length++; //計(jì)算參與和運(yùn)算的參數(shù)個(gè)數(shù)
}
return num / length; //返回平均值
}
console.log(avg(1, 2, 3, 4)); //返回2.5
console.log(avg(1, 2, "3", 4)); //返回2.3333333333333335
遍歷或訪問(wèn)實(shí)參的值
arguments 對(duì)象是偽類(lèi)數(shù)組,不是數(shù)組,可以通過(guò) length 屬性和中括號(hào)語(yǔ)法來(lái)遍歷或訪問(wèn)實(shí)參的值。不過(guò),通過(guò)動(dòng)態(tài)調(diào)用的方法,也可以使用數(shù)組的方法,如 push、pop、slice 等。
下面示例使用動(dòng)態(tài)調(diào)用的方法,讓 arguments 對(duì)象調(diào)用數(shù)組方法 slice(),可以把函數(shù)的參數(shù)對(duì)象轉(zhuǎn)換為數(shù)組。
function f() {
return [].slice.apply(arguments);
// 也可以使用如下寫(xiě)法
// return Array.from(arguments);
// return [...arguments];
}
console.log(f(1, 2, 3, 4, 5, 6)); //返回[1,2,3,4,5,6]
總結(jié)
以上就是對(duì) Arguments 對(duì)象實(shí)際用途的一些總結(jié),希望我們都能夠靈活使用 Arguments,寫(xiě)出詩(shī)一樣的代碼!
到此這篇關(guān)于詳解JavaScript中Arguments對(duì)象用途的文章就介紹到這了,更多相關(guān)JavaScript中Arguments對(duì)象用途內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
一個(gè)簡(jiǎn)單但常用的javascript表格樣式_鼠標(biāo)劃過(guò)行變色 簡(jiǎn)潔實(shí)現(xiàn)
經(jīng)常性的會(huì)需要使用表格顯示一些東西,當(dāng)表格比較大的時(shí)候一眼望去腦袋可能會(huì)有些暈,經(jīng)常性的因?yàn)闆](méi)看準(zhǔn)行而出現(xiàn)誤操作,一般解決辦法是交替行變行或者鼠標(biāo)劃過(guò)行變色2008-09-09
在layui框架中select下拉框監(jiān)聽(tīng)更改事件的例子
今天小編就為大家分享一篇在layui框架中select下拉框監(jiān)聽(tīng)更改事件的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09
有關(guān)文件上傳 非ajax提交 得到后臺(tái)數(shù)據(jù)問(wèn)題
本文給大家介紹關(guān)于文件上傳非ajax提交得到后臺(tái)數(shù)據(jù)的問(wèn)題我們?cè)撛趺刺幚砟??下文給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2016-10-10
javascript校驗(yàn)價(jià)格合法性實(shí)例(必須輸入2位小數(shù))
這篇文章主要介紹了javascript校驗(yàn)價(jià)格合法性實(shí)例,其中價(jià)格必須是數(shù)字且必須輸入2位小數(shù),需要的朋友可以參考下2014-05-05

