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 のインストールとアップグレードの問題に関する詳細なチュートリアル

推薦する

ドロップダウンメニュー効果を実現するJavaScript

参考までに、JavaScriptを使用してドロップダウンメニューを実装します。具体的な内容は次のとお...

Docker を使用した Laravel アプリケーションのデプロイ例

この記事で使用されているPHPベースイメージはphp:7.3-apacheです。この記事の Lara...

MySQL トリガー構文とアプリケーション例

この記事では、例を使用して MySQL トリガーの構文とアプリケーションを説明します。ご参考までに、...

MySQLソースコマンドの使い方の紹介

目次ネット上の質問から生まれた思考MySQL ソースコマンドネット上の質問から生まれた思考今日仕事中...

Kali に docker と portainer をインストールする方法

dockerの登場により、多くのサービスが徐々にハードウェアアーキテクチャへの依存から脱却しました。...

Webpack4プラグインの実装原理についての簡単な説明

目次序文知る練習すれば完璧になる序文wabpack では、ローダーの他にプラグインがコア機能です。プ...

スケルトン スクリーンの読み込みプレースホルダー アニメーション効果を実装するための CSS + HTML (アニメーション付き)

効果上から下へフェードアウト ソースコードhtml、Angular構文を使用して、必要な構文を取得す...

js キャンバスはランダムなパーティクル効果を実現します

この記事の例では、参考のためにjsキャンバスランダムパーティクルエフェクトの具体的なコードを共有して...

Linux CentOS MySQL データベースのインストールと設定のチュートリアル

MySQLデータベースのインストールに関するメモ、みんなで共有a) MySQL ソースインストールパ...

フロントエンド Vue ユニットテストを始める

目次1. ユニットテストはなぜ必要なのでしょうか? 2. ユニットテストの書き方3. テストツール4...

Linux で Ceph 分散ソフトウェアをインストールして使用する方法に関するチュートリアル

目次序文1. 基本環境1. サービス配信2. ネットワーク構成(全ノード) 3. SSHパスワードフ...

Nginx フォワードプロキシとリバースプロキシの違いと原理分析

1. フォワードプロキシとリバースプロキシの違いフォワード プロキシはクライアントのプロキシとして機...

WeChatアプレットは固定ヘッダーとリストテーブルコンポーネントを実装します

目次必要:機能ポイントレンダリング実装のアイデア具体的なコード(react\taro3.0)特定のコ...

仮想マシンクローン Linux centos6.5 システム ネットワーク カード構成グラフィック チュートリアル

Linux システムに触れたばかりの初心者として、VMware 仮想マシンに CentOS6.5 シ...

mysql 実行プラン ID が空である (UNION キーワード) の詳細な説明

導入作業プロセス中に、遅いクエリが調整されることがあります。 MySQL SQL ステートメントのチ...