站長資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

        javascript arguments對象怎么用

        javascript arguments對象的用法:1、獲取實參和形參的個數(shù);2、修改實參值;3、改變實參的個數(shù);4、檢測用戶傳遞的參數(shù)是否符合要求;5、函數(shù)的參數(shù)個數(shù)不確定時,用于訪問調(diào)用函數(shù)的實參值;6、遍歷或訪問實參的值。

        javascript arguments對象怎么用

        本教程操作環(huán)境:windows7系統(tǒng)、javascript1.8.5版、Dell G3電腦。

        arguments 對象表示函數(shù)的實參集合,僅能夠在函數(shù)體內(nèi)可見,并可以直接訪問。

        arguments 對象的 length 屬性和 callee 屬性最為常用:

        • 使用 length 屬性可以獲取函數(shù)的實參個數(shù)。arguments 對象只能在函數(shù)體內(nèi)可見,因此 arguments.length 也只能在函數(shù)體內(nèi)使用。

        • 使用 callee 屬性可以引用當前 arguments 對象所在的函數(shù)。使用 callee 屬性可以在函數(shù)體內(nèi)調(diào)用函數(shù)自身。在匿名函數(shù)中,callee 屬性比較有用。例如,利用它可以設(shè)計遞歸調(diào)用。

        示例1:獲取實參和形參的個數(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ù)

        示例2:在函數(shù)內(nèi)部修改實參的值

        在下面示例中使用 for 循環(huán)遍歷 arguments 對象,然后把循環(huán)變量的值傳入 arguments,以便于改變實參值。

        function f() {     for (var i = 0; i < arguments.length; i++) {  //遍歷arguments對象         arguments[i] = i;  //修改每個實參的值         console.log(arguments[i]);  //提示修改的實參值     } } f(3, 3, 6);  //返回提示0、1、2,而不是3、3、6

        示例3:改變函數(shù)實參的個數(shù)

        通過修改 length 屬性值,也可以改變函數(shù)的實參個數(shù)。當 length 屬性值增大時,則增加的實參值為 undefined;如果 length 屬性值減小,則會丟棄 length 長度值之后的實參值。

        function f() {     arguments.length = 2;  //修改arguments屬性對象的length屬性值     for (var i = 0; i < arguments.length; i ++) {         console.log(arguments[i]);     } } f(3, 3, 6);  //返回提示3、3

        示例4:檢測用戶傳遞的參數(shù)是否符合要求

        在下面示例中,使用 arguments.callee 獲取匿名函數(shù),然后通過函數(shù)的 length 屬性獲取函數(shù)形參個數(shù),最后比較實參個數(shù)與形參個數(shù),以檢測用戶傳遞的參數(shù)是否符合要求。

        function f(x,y,z) {     var a = arguments.length();  //獲取函數(shù)實參的個數(shù)     var 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。

        arguments 對象的應(yīng)用

        在實際開發(fā)中,arguments 對象非常有用。靈活使用 arguments 對象,可以提升使用函數(shù)的靈活性,增強函數(shù)在抽象編程中的適應(yīng)能力和糾錯能力。下面結(jié)合幾個典型示例展示 arguments 的應(yīng)用。

        1) 使用 arguments 對象能夠增強函數(shù)應(yīng)用的靈活性。例如,如果函數(shù)的參數(shù)個數(shù)不確定,或者函數(shù)的參數(shù)個數(shù)很多,而又不想逐一定義每一個形參,則可以省略定義參數(shù),直接在函數(shù)體內(nèi)使用 arguments 對象來訪問調(diào)用函數(shù)的實參值。

        示例1

        下面示例定義一個求平均值的函數(shù),該函數(shù)借助 arguments 對象來計算參數(shù)的平均值。在調(diào)用函數(shù)時,可以傳入任意多個參數(shù)。

        function avg() {  //求平均值     var num = 0, 1 = 0;  //聲明并初始化臨時變量     for (var i = 0; i < arguments.length; i ++) {  //遍歷所有實參         if (typeof arguments[i] != "number")  //如果參數(shù)不是數(shù)值             continue;  //則忽略該參數(shù)值         num += arguments[i];  //計算參數(shù)的數(shù)值之和             1 ++;  //計算參與和運算的參數(shù)個數(shù)     }         num /= 1;  //求平均值     return num;  //返回平均值 } console.log(avg(1,2,3,4));  //返回2.5 console.log(avg(1,2,"3",4));  //返回2.3333333333333335

        示例2

        在頁面設(shè)計中經(jīng)常需要驗證表單輸入值,下面示例檢測文本框輸入的值是否為合法的郵箱地址。

        function isEmail() {     if (arguments.length > 1) throw new Error("只能夠傳遞一個參數(shù)");  //檢測參數(shù)個數(shù)     var regexp = /^w+((-w+) | (.w+)) *@[A-Za-z0-9]+((.|-)[A-Za-z0-9]+)8.[A-Za-z0-9]+$/;  //定義正則表達式     if (arguments[0].search(regexp) != -1)  //匹配實參的值         return true;  //如果匹配則返回true     else          return false;  //如果不匹配則返回false } var email = "1798017447@qq.com";  //聲明并初始化郵箱地址字符串 console.log(isEmail(email));  //返回true

        2) arguments 對象是偽類數(shù)組,不是數(shù)組,可以通過 length 屬性和中括號語法來遍歷或訪問實參的值。不過,通過動態(tài)調(diào)用的方法,也可以使用數(shù)組的方法,如 push、pop、slice 等。

        示例3

        使用 arguments 可以模擬重載。實現(xiàn)方法:通過 arguments.length 屬性值判斷實際參數(shù)的個數(shù)和類型,決定執(zhí)行不同的代碼。

        function sayHello() {     switch(arguments.length) {         case 0 :             return "Hello";         case 1 :             return "Hello, " + arguments[0];         case 2 :             return (arguments[1] == "cn" ? "你好, " : "Hello, ") + arguments[0];     }; } console.log(sayHello());  //"Hello" console.log(sayHello("Alex"));  //"Hello,Alex" console.log(sayHello("Alex", "vn"));  //"你好,Alex"

        示例4

        下面示例使用動態(tài)調(diào)用的方法,讓 arguments 對象調(diào)用數(shù)組方法 slice(),可以把函數(shù)的參數(shù)對象轉(zhuǎn)換為數(shù)組。

        function f() {     return [].slice.apply(arguments); } console.log(f(1,2,3,4,5,6));  //返回[1,2,3,4,5,6]

        【推薦學(xué)習:javascript高級教程】

        贊(0)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
        主站蜘蛛池模板: 久久精品国产99久久久| 国产精品久久免费| 8AV国产精品爽爽ⅴa在线观看| 国产精品亚洲玖玖玖在线观看| 国产精品熟女一区二区| 亚洲国产精品毛片av不卡在线| 国产精品久久久久久| 人人妻人人澡人人爽人人精品97 | 精品国产三级a∨在线| 亚洲国产av无码精品| 国产高清国内精品福利99久久| 99re久久精品国产首页2020| 日韩精品无码免费一区二区三区| 日韩精品毛片| 精品一区二区三区免费视频| 99久久免费国产精品| 国产精品v片在线观看不卡| 综合在线视频精品专区| 人妻无码精品久久亚瑟影视| 精品国产不卡一区二区三区| 欧美精品/日韩精品/国产精品 | 日韩精品无码一区二区三区| 亚洲国产精品丝袜在线观看| 久久精品成人欧美大片 | 久久久久久久99精品免费观看| 国产精品后入内射日本在线观看| 欧美精品hdvideosex4k| 亚洲国产精品成人精品无码区| 夜夜爽一区二区三区精品| 亚洲AV无码成人精品区狼人影院 | 麻豆精品不卡国产免费看| 91精品国产自产在线观看永久| 精品无码AV无码免费专区| 精品免费久久久久久久| 国产精品人人爽人人做我的可爱| 精品久久久噜噜噜久久久| 国产精品三级国产电影| 国产精品亚洲精品| 91精品成人免费国产片| 成人亚洲日韩精品免费视频| 国产精品亚洲视频|