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クラスタをインストールし、パスワードを設定します

推薦する

Nginx の場所と proxy_pass パスの設定の問題の概要

目次1. Nginxロケーションの基本設定1.1 Nginx 設定ファイル1.2 Pythonスクリ...

element.style インライン スタイルを変更する方法のチュートリアル

序文上記の Web ページ スタイルを記述しているときに、スタイルの値をどのように変更しても、ページ...

CentOS に MySQL 8.0 をインストールして設定するための詳細な手順

序文CentOS に MySQL をインストールして設定する手順は次のとおりです。文章yumソースか...

HTML で margin:0 auto を使用するとページ全体が中央に配置されない問題の解決方法

今日、jsp ページを書きました。<div style="margin:0 auto...

MySQL の null と not null、null と空の値の違いの詳細な説明 ''''

MySQL を長い間使用してきた多くの人は、これら 2 つのフィールド属性の概念をまだよく理解して...

メッセージボードにメッセージを追加および削除するための JavaScript

この記事では、JavaScript メッセージ ボードでメッセージを追加および削除する小さな例を詳細...

Zabbix redis 自動ポート検出スクリプトは json 形式を返します

自動検出を行う際には、ポートなどの情報を取得してjson形式で返すスクリプトが必ず存在します。Red...

MySQL の時間タイプとモードの詳細

目次1. MySQL の時刻型2. タイムゾーンを確認する3. 不正な時間値4. 厳密モード5. 事...

CSSのborder-radiusプロパティを使用して円弧を設定します

現象: divを一定の振幅で円、楕円などに変更する方法: CSSのborder-radiusプロパテ...

HTML におけるスクリプトの配置に関する簡単な説明

以前は、スクリプトは HTML 内のどこにでも配置できると思っていましたが、今日、要件に取り組んでい...

MySQL 最適化 Zabbix パーティション最適化

zabbix を利用する上での最大のボトルネックはデータベースです。zabbix のデータストレージ...

HTML マーキー文字フラグメントのスクロール

その特性は次のとおりです。方向アクティブな字幕のスクロール方向を設定するコードは次のとおりです。 &...

Nginx リバース プロキシ構成の完全なプロセス記録

1. 準備LinuxシステムにTomcatをインストールし、デフォルトのポート8080を使用してTo...

Dockerは異常なコンテナ操作を排除する

この初心者は、Docker を学び始めたばかりの頃にこのような問題に遭遇しました。記録しておきます。...

Linux 上の MYSQL 5.7 でルート パスワードを取得する際の問題 (テスト済み、利用可能)

目次1. --skip-grant-tables 経由で取得する1.1 my.conf を変更し、新...