ES6拡張演算子の理解と使用シナリオ

ES6拡張演算子の理解と使用シナリオ

スプレッド演算子、つまり ... 演算子は、es6 に追加された新しい構文です。その主な機能は、配列またはオブジェクトを展開することです (この記述は正確ではない可能性があります)。次の要約が、その使用方法を理解するのに役立つことを願っています。

使用シナリオについての私の個人的な理解と要約は次のとおりです。

1. 適用メソッドを置き換え、関数を呼び出すときにパラメータを処理する

パラメータが配列であると仮定します (ここでは単一のパラメータについては説明せず、パラメータを 1 つずつ渡します)。

var args = [1, 2, 3];

次に、このパラメータ配列内のすべての要素の合計を返す必要があるため、ES5 のアプローチは次のようになります。

関数addFun(x, y, z) {
    x + y + z を返します。
}

var args = [1, 2, 3];

// 2 つの呼び出し方法 // 1. この方法は、パラメータが少ない場合に使用できますが、パラメータが多すぎる場合は信頼できません。
addFun(引数[0], 引数[1], 引数[2])

// 2. apply メソッドを使用して配列を直接渡します。addFun.apply(null, args);

Apply メソッドは、パラメータが多すぎる問題を非常にうまく解決できますが、前提として、apply メソッドと call メソッドを明確に区別する必要があります。多くの学生は、apply メソッドをほとんど使用しないと推定されます。

ES6 では、はるかに単純なスプレッド演算子が使用されます。

関数addFun(x, y, z) {
    x + y + z を返します。
}

var args = [1, 2, 3];

addFun(...引数);

ここで、... 演算子は、計算のために args 配列を個々の要素に分割します。

2. 残りパラメータ(残り演算子)、主に関数パラメータ用

レスト演算子とスプレッド演算子はどちらも同じ名前ですが、使用方法は異なります。レスト演算子とスプレッド演算子は正反対であると簡単に理解できます。スプレッド演算子は配列またはオブジェクトを拡張しますが、レスト演算子は複数の要素を「結合」します。

主に不定パラメータに使用され、引数の代わりとして理解できるため、ES6ではargumentsオブジェクトは使用されなくなりました。

demoFun = function(...args) {
    for (let 引数の項目) {
        console.log(アイテム);
    }
}

デモファン(1, 2, 3) // 1, 2, 3
demoFun = function(argA, ...args) とします。
    console.log(argA);
    console.log(引数)
}

デモファン(1, 2, 3);
// 1
// [23]

構造と一緒に使用する場合は、それを全体の要素として考えます。

var [a, ...残り] = [1, 2, 3, 4];

// ここでは、...rest は要素として扱われます。 console.log(a) // 1
console.log(...rest) // [2, 3, 4]

3. データ接続と統合

配列を連結し、push を使用して配列を別の配列の末尾に追加します。

var arr1 = [1, 2, 3];
var arr2 = [4, 5, 6];

// ES5 処理メソッド Array.prototype.push.apply(arr1, arr2);
console.log(arr1) // [1, 2, 3, 4, 5, 6]

// ES6 処理メソッド arr1.push(...arr2);
console.log(arr1) // [1, 2, 3, 4, 5, 6]

配列を結合する(concat メソッドの代わりに)

var arr1 = ['a', 'b', 'c'];
var arr2 = ['d'、 'e'、 'f'];

// ES5 連結 var es5Arr = arr1.concat(arr2);
console.log(es5Arr) // ['a', 'b', 'c', 'd', 'e', 'f']

// ES6 マージ var es6Arr = [...arr1, ...arr2];
console.log(es6Arr) // ['a', 'b', 'c', 'd', 'e', 'f']

4. 配列とオブジェクトのコピー

配列のコピー

var arr1 = [1, 2, 3];
var arr2 = [...arr1];

console.log(arr1 === arr2) // 偽

arr2.push(4); // arr2を変更してもarr1の値には影響しません console.log(arr1); // [1, 2, 3]
console.log(arr2); // [1, 2, 3, 4]

物体についても同様である

var obj1 = {
    a: 1、
    2 倍
};

var obj2 = {...obj1};

console.log(obj1 === obj2); // 偽

obj2.c = 3; // obj2 を変更しても obj1 には影響しません
console.log(obj1); // {a: 1, b: 2}
console.log(obj2); // {a: 1、b: 2、c: 3}

注: 拡張演算子のコピーは浅いコピーであり、配列またはオブジェクトの最初のレベルでのみ機能します。

5. 文字列を配列に変換する

var str = 'hello';

// ES5 処理メソッド var es5Arr = str.split('');
console.log(es5Arr) // ["h", "e", "l", "l", "o"]

// ES6 処理メソッド var es6Arr = [...str];
console.log(es6Arr) // ["h", "e", "l", "l", "o"]

6. 関数を呼び出すときに拡張演算子を使用します。

以前は、配列要素を関数パラメータとして反復処理する場合、通常は Function.prototype.apply を使用していました。

関数 myFunction(x, y, z) { 
  コンソールログ(x+""+y+""+z);
} 
var args = [0, 1, 2]; 
myFunction.apply(null, args);

スプレッド構文を使用すると、次のように記述できます。

関数 myFunction(x, y, z) { 
  コンソールログ(x+""+y+""+z); 
} 

var args = [0, 1, 2]; 
myFunction(...引数);

ヒント: ...arr は配列を返すのではなく、各配列の値を返します。 [...arr] のみが配列なので、...arr を使用してメソッドに値を渡すことができます。

要約する

...演算子の一般的な方法とシナリオは上記のとおりです。マップや擬似配列の変換など、その他の使用方法については詳しく説明しません。興味のある方は自分で情報を確認してください。実際、基本的な使用方法は似ています。まとめると、3つのドットは、レスト演算子の場合は仮パラメータまたは等号の左側に配置され、スプレッド演算子の場合は実パラメータまたは等号の右側に配置されます。つまり、レスト演算子の場合は割り当て側に配置され、スプレッド演算子の場合は割り当て側に配置されます。

ES6 スプレッド演算子の理解と使用シナリオに関するこの記事はこれで終了です。ES6 スプレッド演算子に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • JavaScript スプレッド演算子の使用例のまとめ [ES6 ベース]
  • ES6スプレッド演算子の使用例
  • TSオブジェクトのスプレッド演算子とレスト演算子の詳細な説明
  • ES6拡張演算子の使い方と注意点を詳しく解説
  • ES6 拡張演算子と残り演算子の使用例の分析
  • ES6 配列拡張演算子操作例の分析
  • JS ES の新機能: 拡張演算子の紹介

<<:  Jenkins+tomcat の自動ホットデプロイメント/再起動と発生した問題の解決策 (推奨)

>>:  MySQL 5.7.30 のインストールとアップグレードの問題に関する詳細なチュートリアル

推薦する

Docker イメージ管理の一般的な操作コード例

ミラーリングも Docker のコアコンポーネントの 1 つです。ミラーリングはコンテナ操作の基盤で...

MySQLでクエリキャッシュを実行する方法と失敗を解決する方法

関数を使用する前にパラメータのプロパティを理解して、関数の使い方をより深く理解する必要があることは誰...

MySQL 5.7.17 のインストールと設定方法のグラフィック チュートリアル (Ubuntu 16.04)

公式 MySQL Web サイトから Ubuntu Linux 用の最新バージョンの MySQL を...

HTML 要素 (タグ) とその使用法

a : ハイパーリンクの開始位置または宛先位置を示します。頭字語: 単語の最初の文字からなる略語を示...

Alibaba Cloud Centos7.X で外部にポートを開く方法

一言で言えば、大手メーカーからクラウド サーバーを購入する場合は、セキュリティ グループに移動して、...

CSSの幅と高さのデフォルト値の詳細な説明:autoと%

結論は幅の%: 包含ブロック(親要素)の幅に基づいて、親の制限を超える幅のパーセンテージを定義します...

タブバーのいくつかの実装方法(推奨)

タブ: カテゴリ + 説明タグバー: カテゴリ => ユーザーに現在地と目的地を知らせる1. ...

Ubuntu でディスク容量不足により MySQL が起動しない場合の解決策

序文最近、データベースのテーブルに 2 つのフィールドを追加しました。その後、ディスク容量不足のよう...

記事では、js を使用して弾幕効果を実現する方法を説明します

目次新しい HTML ファイルを作成します。初期テンプレートを作成するHTML の追加CSS パディ...

Linux 環境に MySQL 8.0 をインストールするプロセスの紹介

目次序文1. Linux は yum ソースを変更します (MYSQL のインストールが遅い場合は試...

将来人気が出るであろういくつかのナビゲーション方向

<br />今は情報爆発の時代であるだけでなく、サービス爆発の時代でもあります。それはす...

mysql8 共通テーブル式 CTE 使用例の分析

この記事では、例を使用して、MySQL 8 の共通テーブル式 (CTE) の使用方法を説明します。ご...

JavaScript にはすでに Object があるのに、なぜ Map が必要なのでしょうか?

目次1. オブジェクトをマップとして扱わない1. 未定義のプロパティはプロトタイプチェーンを通じてア...

Linux で crontab 出力リダイレクトが有効にならない問題の解決方法

質問LINUX では、定期的なタスクは通常、cron デーモン プロセス [ps -ef | gre...

nginx がどのようにして高いパフォーマンスとスケーラビリティを実現するのかを深く理解する

NGINX の全体的なアーキテクチャは、連携して動作する一連のプロセスによって特徴付けられます。メイ...