JavaScript における Arguments オブジェクトの使用に関する詳細な説明

JavaScript における Arguments オブジェクトの使用に関する詳細な説明

実際の開発では、Arguments オブジェクトが非常に役立ちます。 Arguments オブジェクトを柔軟に使用すると、関数を使用する柔軟性が向上し、抽象プログラミングにおける関数の適応性とエラー修正機能が強化されます。

JavaScript における Arguments オブジェクトの目的の概要。

序文

私たちの多くは、コード開発の過程で、Arguments オブジェクトという特別なオブジェクトを使用したことがあると思います。

実際の開発では、Arguments オブジェクトが非常に役立ちます。 Arguments オブジェクトを柔軟に使用すると、関数を使用する柔軟性が向上し、抽象プログラミングにおける関数の適応性とエラー修正機能が強化されます。

では、Arguments オブジェクトはどのように使用すればよいのでしょうか?今日はまとめましょう。

議論の基本概念

Arguments は、関数に渡される引数に対応する配列のようなオブジェクトです。

Arguments は配列に似ていますが、配列ではないオブジェクトです。配列と同じアクセス プロパティとメソッドを持っているため、配列に似ています。対応する単一パラメータの値は、 arguments[n]によってアクセスでき、配列の長さ属性を持っています。また、Arguments オブジェクトは関数に実際に渡されるパラメータを格納するもので、関数宣言で定義されたパラメータ リストに限定されず、Arguments オブジェクトを明示的に作成することもできません。

以下は、引数を使用する簡単な例です。

関数func1(a, b, c) {
    console.log(引数[0]);
    console.log(引数[1]);
    console.log(引数[2]);
}

関数1(1, 2, 3);
// 1
// 2
// 3

関数内のargumentsを通じて渡されたパラメータセットを直接取得し、対応する位置のパラメータ値を配列の形式で取得することができます。

議論の役割

JavaScript の特別なオブジェクトとしての Arguments の用途、または使用方法は何ですか?

実パラメータと仮パラメータの数を取得する

関数の実際のパラメータの数を取得するには、arguments.length プロパティを使用します。関数オブジェクトの長さプロパティを使用すると、関数の仮パラメータの数を取得できます。このプロパティは読み取り専用プロパティであり、関数本体の内外で使用できます。

次の例では、関数の仮パラメータと実パラメータが一致しているかどうかをチェックし、一致していない場合は例外をスローする checkArg() 関数を設計します。

関数 checkArg(a) {
    //関数の実際のパラメータと仮パラメータが一致しているかどうかを確認します。if (a.length != a.callee.length)
        // 実際のパラメータの数が仮パラメータの数と異なる場合は、エラーがスローされます。 throw new Error("実際のパラメータと仮パラメータが一致していません");
}

関数 f(a, b) {
    // 2 つの数値の平均を計算します checkArg(arguments); // 引数を使用して、関数の実際のパラメーターと仮パラメーターが一致しているかどうかを確認します return ((a * 1 ? a : 0) + (b * 1 ? b : 0)) / 2; // 平均値を返します }
console.log(f(6)); //例外をスローします。パラメータを渡して関数fを呼び出す

実際のパラメータ値を変更する

次の例では、for ループを使用して arguments オブジェクトを反復処理し、ループ変数の値を arguments に渡して、実際のパラメーター値の変更を容易にしています。

関数f(){
    for (let i = 0; i < arguments.length; i++) { //引数オブジェクトを走査する arguments[i] = i; //各実パラメータの値を変更する console.log(arguments[i]); //変更された実パラメータ値を表示する}
}

f(3, 3, 6); // 3, 3, 6 の代わりに 0, 1, 2 のプロンプトを返します

引数の数の変更

長さプロパティ値を変更することで、関数の実際のパラメータの数も変更できます。長さプロパティ値が増加すると、増加した実際のパラメータ値は未定義になります。長さプロパティ値が減少すると、長さ値の後の実際のパラメータ値は破棄されます。

関数f(){
    arguments.length = 2; //argumentsプロパティオブジェクトの長さプロパティ値を変更します for (let i = 0; i < arguments.length; i++) {
        console.log(引数[i]);
    }
}

f(3, 3, 6); //プロンプト3, 3を返す

パラメータの有効性を確認する

次の例では、arguments.callee を使用して匿名関数を取得し、関数の length プロパティを通じて関数パラメータの数を取得します。最後に、実際のパラメータの数と仮パラメータの数を比較して、ユーザーが渡したパラメータが要件を満たしているかどうかを確認します。

関数 f(x,y,z) {
    let a = arguments.length; //関数の実際のパラメータの数を取得します。let 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 つずつ定義したくない場合は、パラメータの定義を省略し、関数本体で Arguments オブジェクトを直接使用して、呼び出し元関数の実際のパラメータ値にアクセスできます。

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

関数avg() {
    //平均値を求める let num = 0;
    let length = 0; //一時変数を宣言して初期化する for (let i = 0; i < arguments.length; i++) {
        //すべての実パラメータを走査します if (typeof arguments[i] != "number") {
            //パラメータが数値でない場合は続行します。 //パラメータ値を無視します}
        num += arguments[i]; //パラメータの数値の合計を計算します length++; //合計演算に関係するパラメータの数を計算します}

    return num / length; //平均値を返す}

console.log(avg(1, 2, 3, 4)); // 2.5 を返します
console.log(avg(1, 2, "3", 4)); // 2.33333333333333335 を返します

実際のパラメータの値を走査またはアクセスする

引数オブジェクトは配列ではなく疑似配列です。length 属性と括弧構文を使用して、実際のパラメータの値を走査したり、値にアクセスしたりできます。ただし、動的呼び出しメソッドを通じて、push、pop、slice などの配列メソッドを使用することもできます。

次の例では、動的呼び出しメソッドを使用して、引数オブジェクトが配列メソッド slice() を呼び出して、関数パラメーター オブジェクトを配列に変換します。

関数f(){
    [].slice.apply(引数)を返します。
    // 次の式も使用できます // return Array.from(arguments);
    // [...引数] を返します。
}
console.log(f(1, 2, 3, 4, 5, 6)); //[1,2,3,4,5,6]を返します

要約する

上記は、Arguments オブジェクトの実用的な使用法のまとめです。Arguments を柔軟に使用して、詩的なコードを書けるようになることを願っています。

JavaScript での Arguments オブジェクトの使用に関するこの記事はこれで終わりです。JavaScript での Arguments オブジェクトの使用に関する詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • JavaScript によるデータ視覚化: ECharts マップの作成
  • 非常に詳細な基本的なJavaScript構文ルール
  • JavaScript における型の必須および暗黙的な変換の詳細な説明
  • JavaScriptはスライダーを介してWebページの色を変更することを実装します
  • JavaScript es6 における var、let、const の違いの詳細な説明
  • JavaScript における this ポイントの問題の詳細な説明
  • JavaScript 関数呼び出し、適用、バインド メソッドのケース スタディ
  • JavaScript CollectGarbage 関数の例
  • JavaScript における BOM と DOM の詳細な説明
  • JavaScript の setTimeout と setTimeinterval の使用例の説明
  • 期間限定フラッシュセール機能を実現するJavaScriptタイマー
  • 期間限定フラッシュセール機能を実装するJavaScript
  • JavaScript オブジェクト (詳細)

<<:  Grafana+Prometheus を使用して MySQL サービスのパフォーマンスを監視する

>>:  DockerはElasticsearch7.6クラスタをインストールし、パスワードを設定します

推薦する

Linux ハードウェア構成コマンドの例

ハードウェア ビュー コマンドシステム # uname -a # カーネル/オペレーティング システ...

カタツムリ映画システムのDocker展開の詳細なプロセス分析

環境に関する声明ホストOS: Cetnos7.9 最小インストールdocker バージョン: 20....

MySQL 5.7.19 インストールディレクトリに my.ini ファイルを作成する方法

前回の記事では、MySQL 5.7.19 無償インストール版 (64 ビット) の設定方法についての...

美しいHTMLコードの書き方

美しい HTML コードの外観 美しい HTML コードの書き方。外国人が書いた記事: 美しい HT...

WeChatアプレット開発の章:落とし穴の記録

最近、会社初のミニプログラムの開発に参加しました。開発経験は基本的にWebViewをベースとしたハイ...

Apache Bench で Web ストレス テストを実装する方法

1. Apache Benchの紹介ApacheBench は、Apache サーバーに付属する W...

MySQL 8.0 における MySQL のインストールと新しいパスワード認証方法の詳細な説明

1. はじめにOracle が MySQL 8.0GA をリリースしました。海外での GA はリリー...

閲覧時に作成されたWebページの下部にある余分な空白スペースを削除する方法

Dreamweaver または FrontPage を使用して HTML Web ページを作成する場...

...

Linuxシステムでノードプロセスを実行しているが、プロセスを強制終了できない問題を解決します

まず、Linux システムで実行されているノード プロセスはプロセスを強制終了できないことを紹介しま...

ウェブアニメーションのフレームレートFPSを計算する方法

目次スムーズなアニメーションの基準方法1: Chromeデベロッパーツールを使用する方法 2: フレ...

MySQL 分離列とプレフィックスインデックスの使用の概要

目次データ列を分離するプレフィックスインデックスとインデックスの選択性データ列を分離するMySQL ...

LeetCode の SQL 実装 (183. 注文をしたことがない顧客)

[LeetCode] 183.注文しない顧客Web サイトに、Customers テーブルと Or...

MySQL で置換操作を使用したときにデータ損失が発生する問題の解決策

序文同社の開発者は、データの更新時に replace into ステートメントを使用していました。不...

モバイル Web WAP には Bootstrap と jQuery Mobile のどちらを使用すべきか

問題を解決するBootstrap は、次の問題を解決する CSS フレームワークです。デバイス間での...