JavaScript 引数オブジェクトの使用法: 1. 実パラメータと仮パラメータの数を取得する; 2. 実パラメータの値を変更する; 3. 実パラメータの数を変更する; 4. パラメータが渡されたかどうかを確認するユーザーは要件を満たしています; 5. 関数のパラメーターの数が不確実な場合、呼び出し関数の実際のパラメーター値にアクセスするために使用されます; 6. 実際のパラメーターの値をトラバースまたはアクセスします。
このチュートリアルの動作環境: 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
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"
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 サイトの他の関連記事を参照してください。