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

推薦する

Vue で Google サードパーティ ログインを実装するためのサンプル コード

目次1. 開発者プラットフォームの構成問題を解決する1. 開発者プラットフォームの構成1. 開発者プ...

canvas.toDataURL image/png エラー処理方法の推奨

問題の背景:再生中のビデオのスクリーンショットを撮る必要があります。ビデオはビデオタグを使用して再生...

MySQL 8で追加された3つの新しいインデックスは、非表示、降順、関数です。

目次MySQL 8 の隠しインデックス、降順インデックス、関数インデックス1. 隠しインデックス1....

Vue プロジェクトで垂直テーブルを 2 つの方法で実装するアイデアの分析

問題の説明私たちのプロジェクトでは、水平方向のテーブルが一般的ですが、必要に応じて垂直方向のテーブル...

Vue v-for ループを書く 7 つの方法

目次1. v-forループでは常にキーを使用する2. 特定のスコープ内でv-forループを使用する3...

MySQL での and or クエリの優先度分析

これは見落とされがちな問題かもしれません。まず、次の点を明確にする必要があります。 MySQL では...

3 階層ナビゲーション メニューを実現するための js+css

この記事の例では、3レベルのナビゲーションメニューを実装するためのjs + cssの具体的なコードを...

Dell R720 サーバーに Windows Server 2008 R2 をインストールする方法

注: この記事のすべての写真はインターネットから収集されたものであるため、DELL R720 サーバ...

一般的な XHTML タグの使用方法の紹介

XHTML には多くのタグがありますが、頻繁に使用されるのはごくわずかであり、習得する必要があるのは...

CSSで背景ぼかしを設定する方法

ページを作成するときに、ページの見栄えを良くするために、背景画像を設定する必要があることがよくありま...

RGBカラーテーブルコレクション

RGBカラーテーブル色英語名RGB 16色雪255 250 250 #FFFAFAゴーストホワイト2...

React でカレンダー コンポーネントを構築するためのステップ バイ ステップ ガイド

目次事業背景テクノロジーの活用技術的な問題デザインのアイデア😱 困惑と苦痛に満ちた顔🙄考え始める🌲デ...

Ubuntu 20.04 ファイアウォール設定の簡単なチュートリアル (初心者)

序文ますます便利になった今日のインターネット社会では、さまざまなインターネット ランサムウェア ウイ...

Kubernetes (k8s) 入門

Kubernetes は面白そうだったので(ギリシャ人なら名前に問題があると思うでしょうが)、ずっと...

LinuxシステムでのSystemC環境設定方法

以下はcentos7での設定方法ですsystemc ソース パッケージをダウンロード: System...