ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScriptの引数オブ​​ジェクトの使い方

JavaScriptの引数オブ​​ジェクトの使い方

青灯夜游
青灯夜游オリジナル
2021-07-20 11:54:175117ブラウズ

JavaScript 引数オブジェクトの使用法: 1. 実パラメータと仮パラメータの数を取得する; 2. 実パラメータの値を変更する; 3. 実パラメータの数を変更する; 4. パラメータが渡されたかどうかを確認するユーザーは要件を満たしています; 5. 関数のパラメーターの数が不確実な場合、呼び出し関数の実際のパラメーター値にアクセスするために使用されます; 6. 実際のパラメーターの値をトラバースまたはアクセスします。

JavaScriptの引数オブ​​ジェクトの使い方

このチュートリアルの動作環境: Windows7 システム、JavaScript バージョン 1.8.5、Dell G3 コンピューター。

arguments オブジェクトは、関数の実際のパラメーター コレクションを表します。これは関数本体内でのみ表示され、直接アクセスできます。

引数オブジェクトの length 属性と callee 属性が最も一般的に使用されます。

  • length 属性を使用して、関数の実際のパラメータの数を取得します。 argument オブジェクトは関数本体内でのみ表示されるため、arguments.length は関数本体内でのみ使用できます。

  • callee 属性を使用して、現在の引数オブ​​ジェクトが配置されている関数を参照します。 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 ループを使用して引数オブジェクトを走査し、実際のパラメータ値を変更するために、ループ変数の値を argument に追加します。

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 属性値が増加する場合、追加される実際のパラメータ値は不定ですが、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 に相当します。

#引数オブジェクトの応用

#実際の開発では、引数オブジェクトは非常に便利です。引数オブジェクトを柔軟に使用すると、関数の使用の柔軟性が向上し、抽象プログラミングにおける関数の適応性とエラー修正機能が強化されます。以下では、引数の適用を示すために、いくつかの典型的な例を組み合わせています。

1) 引数オブジェクトを使用すると、関数適用の柔軟性を高めることができます。たとえば、関数のパラメータの数が不明な場合、または関数のパラメータの数が多く、仮パラメータを 1 つずつ定義したくない場合は、パラメータの定義を省略して引数オブジェクトを直接使用できます。関数本体内で呼び出し関数の実際のパラメータ値にアクセスします。

例 1

次の例では、引数オブジェクトを使用してパラメーターの平均を計算する平均関数を定義します。関数を呼び出すときは、任意の数のパラメーターを渡すことができます。

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 オブジェクトは、配列ではなく疑似クラスの配列です。実際のパラメーターの値は、長さ属性と括弧の構文を通じて横断またはアクセスできます。ただし、メソッドを動的に呼び出すことにより、プッシュ、ポップ、スライスなどの配列メソッドを使用することもできます。

例 3

引数を使用してオーバーロードをシミュレートします。実装方法: argument.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

次の例では、動的呼び出しメソッドを使用して、引数オブジェクトに配列メソッドのスライス()を呼び出しさせます。これにより、関数パラメーター オブジェクトを配列に変換できます。

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

[推奨学習:

JavaScript 上級チュートリアル]

以上がJavaScriptの引数オブ​​ジェクトの使い方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。