詳解JavaScript中Arguments對象用途
在實際開發(fā)中,Arguments 對象非常有用。靈活使用 Arguments 對象,可以提升使用函數(shù)的靈活性,增強函數(shù)在抽象編程中的適應(yīng)能力和糾錯能力。
JavaScript 中 Arguments 對象的用途總結(jié)。
前言
相信我們很多人在代碼開發(fā)的過程中都使用到過一個特殊的對象 —— Arguments 對象。
在實際開發(fā)中,Arguments 對象非常有用。靈活使用 Arguments 對象,可以提升使用函數(shù)的靈活性,增強函數(shù)在抽象編程中的適應(yīng)能力和糾錯能力。
那么 Arguments 對象到底該怎么用呢?今天我們就來總結(jié)一下。
Arguments 的基本概念
Arguments 是一個對應(yīng)于傳遞給函數(shù)的參數(shù)的類數(shù)組對象。
Arguments 是個類似數(shù)組但不是數(shù)組的對象,說它類似數(shù)組是因為其具備數(shù)組相同的訪問性質(zhì)及方式,能夠由 arguments[n]
來訪問對應(yīng)的單個參數(shù)的值,并擁有數(shù)組長度屬性 length。還有就是 Arguments 對象存儲的是實際傳遞給函數(shù)的參數(shù),而不局限于函數(shù)聲明所定義的參數(shù)列表,而且不能顯式創(chuàng)建 Arguments 對象。
下面是一個簡單使用 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)部,直接通過 arguments
來獲取所傳入的參數(shù)集合,然后以數(shù)組的獲值形式獲取對應(yīng)位置的參數(shù)值。
Arguments 的作用
作為 JavaScript 中的一個特殊對象,Arguments 具有哪些用途,或者說是該怎么用呢?
獲取實參和形參的個數(shù)
使用 arguments.length 屬性可以獲取函數(shù)的實參個數(shù)。使用函數(shù)對象的 length 屬性可以獲取函數(shù)的形參個數(shù),該屬性為只讀屬性,在函數(shù)體內(nèi)、體外都可以使用。
下面示例設(shè)計一個 checkArg() 函數(shù),用來檢測一個函數(shù)的形參和實參是否一致,如果不一致則拋出異常。
function checkArg(a) { //檢測函數(shù)實參與形參是否一致 if (a.length != a.callee.length) //如果實參與形參個數(shù)不同,則拋出錯誤 throw new Error("實參和形參不一致"); } function f(a, b) { //求兩個數(shù)的平均值 checkArg(arguments); //根據(jù)arguments來檢測函數(shù)實參和形參是否一致 return ((a * 1 ? a : 0) + (b * 1 ? b : 0)) / 2; //返回平均值 } console.log(f(6)); //拋出異常。調(diào)用函數(shù)f,傳入一個參數(shù)
修改實參值
在下面示例中使用 for 循環(huán)遍歷 arguments 對象,然后把循環(huán)變量的值傳入 arguments,以便于改變實參值。
function f() { for (let i = 0; i < arguments.length; i++) { //遍歷arguments對象 arguments[i] = i; //修改每個實參的值 console.log(arguments[i]); //提示修改的實參值 } } f(3, 3, 6); //返回提示0、1、2,而不是3、3、6
改變實參的個數(shù)
通過修改 length 屬性值,也可以改變函數(shù)的實參個數(shù)。當(dāng) length 屬性值增大時,則增加的實參值為 undefined;如果 length 屬性值減小,則會丟棄 length 長度值之后的實參值。
function f() { arguments.length = 2; //修改arguments屬性對象的length屬性值 for (let i = 0; i < arguments.length; i++) { console.log(arguments[i]); } } f(3, 3, 6); //返回提示3、3
檢測參數(shù)合法性
在下面示例中,使用 arguments.callee 獲取匿名函數(shù),然后通過函數(shù)的 length 屬性獲取函數(shù)形參個數(shù),最后比較實參個數(shù)與形參個數(shù),以檢測用戶傳遞的參數(shù)是否符合要求。
function f(x,y,z) { let a = arguments.length; //獲取函數(shù)實參的個數(shù) let b = arguments.callee.length; //獲取函數(shù)形參的個數(shù) if (a != b){ //如果實參和形參個數(shù)不相等,則提示錯誤信息 throw new Error("傳遞的參數(shù)不匹配"); }else { //如果實參和形參個數(shù)相同,則返回它們的和 return x + y + z; } } console.log(f(3,4,5)); //返回值12
arguments.callee 等價于函數(shù)名,在上面示例中,arguments.callee 等于 f。
函數(shù)的參數(shù)個數(shù)不確定時,用于訪問調(diào)用函數(shù)的實參值
如果函數(shù)的參數(shù)個數(shù)不確定,或者函數(shù)的參數(shù)個數(shù)很多,而又不想逐一定義每一個形參,則可以省略定義參數(shù),直接在函數(shù)體內(nèi)使用 Arguments 對象來訪問調(diào)用函數(shù)的實參值。
下面示例定義一個求平均值的函數(shù),該函數(shù)借助 arguments 對象來計算參數(shù)的平均值。在調(diào)用函數(shù)時,可以傳入任意多個參數(shù)。
function avg() { //求平均值 let num = 0; let length = 0; //聲明并初始化臨時變量 for (let i = 0; i < arguments.length; i++) { //遍歷所有實參 if (typeof arguments[i] != "number") { //如果參數(shù)不是數(shù)值 continue; //則忽略該參數(shù)值 } num += arguments[i]; //計算參數(shù)的數(shù)值之和 length++; //計算參與和運算的參數(shù)個數(shù) } return num / length; //返回平均值 } console.log(avg(1, 2, 3, 4)); //返回2.5 console.log(avg(1, 2, "3", 4)); //返回2.3333333333333335
遍歷或訪問實參的值
arguments 對象是偽類數(shù)組,不是數(shù)組,可以通過 length 屬性和中括號語法來遍歷或訪問實參的值。不過,通過動態(tài)調(diào)用的方法,也可以使用數(shù)組的方法,如 push、pop、slice 等。
下面示例使用動態(tài)調(diào)用的方法,讓 arguments 對象調(diào)用數(shù)組方法 slice(),可以把函數(shù)的參數(shù)對象轉(zhuǎn)換為數(shù)組。
function f() { return [].slice.apply(arguments); // 也可以使用如下寫法 // return Array.from(arguments); // return [...arguments]; } console.log(f(1, 2, 3, 4, 5, 6)); //返回[1,2,3,4,5,6]
總結(jié)
以上就是對 Arguments 對象實際用途的一些總結(jié),希望我們都能夠靈活使用 Arguments,寫出詩一樣的代碼!
到此這篇關(guān)于詳解JavaScript中Arguments對象用途的文章就介紹到這了,更多相關(guān)JavaScript中Arguments對象用途內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
js實現(xiàn)簡單的省市縣三級聯(lián)動效果實例
這篇文章主要介紹了js實現(xiàn)簡單的省市縣三級聯(lián)動效果,以完整實例形式分析了JavaScript實現(xiàn)省市縣三級聯(lián)動效果的具體步驟與相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2016-02-02微信小程序?qū)W習(xí)筆記之函數(shù)定義、頁面渲染圖文詳解
這篇文章主要介紹了微信小程序?qū)W習(xí)筆記之函數(shù)定義、頁面渲染,結(jié)合實例形式較為詳細的分析了微信小程序中函數(shù)的定義、生命周期、模板調(diào)用、樣式控制等操作技巧,并配合圖文形式進行了詳細說明,需要的朋友可以參考下2019-03-03JavaScript之排序函數(shù)_動力節(jié)點Java學(xué)院整理
排序也是在程序中經(jīng)常用到的算法。這篇文章主要介紹了JavaScript之排序函數(shù),有興趣的可以了解一下2017-06-06JavaScript實現(xiàn)生成動態(tài)表格和動態(tài)效果的方法詳解
這篇文章主要介紹了如何通過JavaScript語言實現(xiàn)動圖表格的生成以及動態(tài)效果的實現(xiàn),文中的示例代碼講解詳細,感興趣的可以了解一下2022-02-02基于js?+?html2canvas實現(xiàn)網(wǎng)頁放大鏡功能
最近接到任務(wù),需實現(xiàn)【網(wǎng)頁】放大鏡的效果,百度搜索?【js?放大鏡】關(guān)鍵字,千篇一律的都是一些仿淘寶/京東等電商網(wǎng)站中查看規(guī)格大圖的效果實現(xiàn),根本無法滿足我的需求,于是自己花了點時間調(diào)研實現(xiàn),在這里分享給大家,感興趣的朋友可以參考下2023-12-12