ECMAScript 6学習ノート(一):演算子を展開します.md

2231 ワード

JavascriptはECMAScriptの実現と拡張であり、ES 6標準の制定もJavascriptに多くの新しい特性を追加しています.本稿は主に展開演算子を記録します.
演算子を展開すると、表現がどこで展開されますか?展開演算子は、複数のパラメータ(関数呼び出し用)または複数の要素(配列の字面量用)または複数の変数(構文解析用)の場所で使用できます.
拡張演算子はオブジェクトには使用できません.現在展開されている演算子は、巡回可能なオブジェクトでのみ使用できます.iterables実装は[Symbol.iterator]関数に依存していますが、現在はAray,Set,Stringは[Symbol.iterator]メソッドを内蔵していますが、Objectはまだこの方法を内蔵していないので、展開演算子は使えません.しかし、ES 7草案には、オブジェクト展開演算子の特性が盛り込まれています.
関数コールで展開演算子を使用します.
  • は、以前に、1つの配列を複数のパラメータ
  • に展開するために、appy方法を使用していた.
    function test(a, b, c) { }
    var args = [0, 1, 2];
    test.apply(null, args);
    
    
    このように、私たちはargs配列を実際の参としてa、b、cに渡しました.こちらはFuntions.prototype.appyの特性を利用しています.
    しかし、ES 6があれば、配列パラメータをより簡潔に伝えることができます.
    function test(a, b, c) {}
    var args = [0, 1, 2];
    test(...args);
    
    私たちは…を使って演算子を展開すると、argsを直接test()関数に渡すことができます.
    配列の文字数に展開演算子を使用します.
  • ES 6の世界では、直接行列を追加して別の配列に結合できます.
  • var arr1 = [ 'a', 'b', 'c' ];
    var arr2 = [ ...arr1, 'd', 'e' ];  // [ 'a', 'b', 'c', 'd', 'e' ]
    
  • 展開演算子は、push関数においても使用でき、2つの配列をappy()関数で結合する必要はない.
  • var arr1 = [ 'a', 'b', 'c' ] 
    var arr2 = [ ...arr1, 'd', 'e' ]  // //['a','b','c','d','e']
    
    を選択します
    この展開演算子は、ES 6の特性の一つでもある.
    let [arg1, arg2, ...arg3] = [1, 2, 3, 4];
    arg1  // 1
    arg2  // 2
    arg3  // [ '3', '4' ]
    
    展開演算子の解構成値での役割は、以前の役割とは反対に見えるので、複数の配列を新しい配列に結合します.ただし、演算子を展開するときは、演算子は最後にのみ使用できます.
    let [arg1,...arg2,arg3] = [1, 2, 3, 4]; //  
    
    ES 7草案のオブジェクト展開演算子
    ES 7のオブジェクト展開演算子は、より高速なオブジェクト操作を可能にします.
    let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4};
    x // 1
    y // 2
    z // { a: 3, b: 4 }
    
    以上のように、オブジェクトの一部を、展開演算子のパラメータに新しいオブジェクトに割り当てられます.
    また、配列挿入のように別のオブジェクトにオブジェクトを挿入することもできます.
    let z = { a: 3, b: 4};
    let n = { x: 1, y: 2, ...z};
    n // {x:1,y:2,a:3,b:4}
    
    他にも多くの用途があります.例えば、2つのオブジェクトを統合することができます.
    let a = { x: 1, y: 2 };
    let b = { z: 3 };
    let ab = { ...a, ...b };
    ab // { x: 1, y:2, z: 3 }
    
    転載先:http://www.cnblogs.com/mingjiezhang/p/5903026.html