首頁 > web前端 > js教程 > 主體

javascript arguments物件怎麼用

青灯夜游
發布: 2023-01-07 11:44:23
原創
5075 人瀏覽過

javascript arguments物件的用法:1、取得實參和形參的個數;2、修改實參值;3、改變實參的個數;4、偵測使用者傳遞的參數是否符合要求;5、函數的參數個數不確定時,用於存取呼叫函數的實參值;6、遍歷或存取實參的值。

javascript arguments物件怎麼用

本教學操作環境:windows7系統、javascript1.8.5版、Dell G3電腦。

arguments 物件表示函數的實參集合,僅能夠在函數體內可見,並且可以直接存取。

arguments 物件的 length 屬性和 callee 屬性最為常用:

  • 使用 length 屬性可以取得函數的實參數。 arguments 物件只能在函數體內可見,因此 arguments.length 也只能在函數體內使用。

  • 使用 callee 屬性可以引用目前 arguments 物件所在的函數。使用 callee 屬性可以在函數體內呼叫函數本身。在匿名函數中,callee 屬性比較有用。例如,利用它可以設計遞歸呼叫。

範例1:取得實參與形參的數量

使用 arguments.length 屬性可以取得函數的實參數。使用函數物件的 length 屬性可以取得函數的形參數,此屬性為唯讀屬性,在函數體內、體外都可以使用。

下面範例設計一個 checkArg() 函數,用來偵測一個函數的形參和實參是否一致,如果不一致則拋出例外。

function checkArg(a) {  //检测函数实参与形参是否一致
    if (a.length != a.callee.length)  //如果实参与形参个数不同,则抛出错误
    throw new Error("实参和形参不一致");
}
function f(a, b) {  //求两个数的平均值
    checkArg(arguments);   //根据arguments来检测函数实参和形参是否一致
    return ((a * 1 ? a : 0) + (b * 1 ? b : 0)) / 2;  //返回平均值
}
console.log(f(6));  //抛出异常。调用函数f,传入一个参数
登入後複製

範例2:在函數內部修改實參的值

#在下面範例中使用for 迴圈遍歷arguments 對象,然後把循環變數的值傳入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:改變函數實參的個數

#透過修改 length 屬性值,也可以改變函數的實參數。當 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:偵測使用者傳遞的參數是否符合要求

#在下面範例中,使用arguments.callee 取得匿名函數,然後透過函數的length 屬性取得函數形參個數,最後比較實參個數與形參個數,以偵測使用者傳遞的參數是否符合要求。

function f(x,y,z) {
    var a = arguments.length();  //获取函数实参的个数
    var b = arguments.callee.length;  //获取函数形参的个数
    if (a != b_ {  //如果实参和形参个数不相等,则提示错误信息
        throw new Error("传递的参数不匹配");
    }else {  //如果实参和形参个数相同,则返回它们的和
        return x + y + z; 
    }
}
console.log(f(3,4,5));  //返回值12
登入後複製

arguments.callee 等價於函數名,在上面範例中,arguments.callee 等於 f。

arguments 物件的應用

在實際開發中,arguments 物件非常有用。靈活使用 arguments 對象,可以提升使用函數的靈活性,增強函數在抽象程式設計中的適應能力和糾錯能力。以下結合幾個典型範例展示 arguments 的應用。

1) 使用 arguments 物件能夠增強函數應用的彈性。例如,如果函數的參數個數不確定,或者函數的參數個數很多,而又不想逐一定義每一個形參,則可以省略定義參數,直接在函數體內使用arguments 物件來存取呼叫函數的實參值。

範例1

下面範例定義一個求平均值的函數,該函數藉助 arguments 物件來計算參數的平均值。在呼叫函數時,可以傳入任意多個參數。

function avg() {  //求平均值
    var num = 0, 1 = 0;  //声明并初始化临时变量
    for (var i = 0; i < arguments.length; i ++) {  //遍历所有实参
        if (typeof arguments[i] != "number")  //如果参数不是数值
            continue;  //则忽略该参数值
        num += arguments[i];  //计算参数的数值之和
            1 ++;  //计算参与和运算的参数个数
    }    
    num /= 1;  //求平均值
    return num;  //返回平均值
}
console.log(avg(1,2,3,4));  //返回2.5
console.log(avg(1,2,"3",4));  //返回2.3333333333333335
登入後複製

範例2

在頁面設計中經常需要驗證表單輸入值,以下範例偵測文字方塊輸入的值是否為合法的郵件地址。

function isEmail() {
    if (arguments.length > 1) throw new Error("只能够传递一个参数");  //检测参数个数
    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 物件是偽類別數組,不是數組,可以透過 length 屬性和中括號語法來遍歷或存取實參的值。不過,透過動態呼叫的方法,也可以使用陣列的方法,如 push、pop、slice 等。

範例3

使用 arguments 可以模擬重載。實作方法:透過 arguments.length 屬性值判斷實際參數的個數和型別,決定執行不同的程式碼。

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

下面範例使用動態呼叫的方法,讓 arguments 物件呼叫陣列方法 slice(),可以把函數的參數物件轉換為陣列。

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

【推薦學習:javascript進階教學

以上是javascript arguments物件怎麼用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!