Node.js 4.0のES 6の新特性

6106 ワード

概要
Node.jsはChrome V 8エンジンに基づくJavaScript実行環境です.Node.jsはイベント駆動、非閉塞式I/Oのモデルを使用しており、軽量で効率的です.Node.jsのパッケージマネージャnpmは、世界最大のオープンソースライブラリ生態システムです.
Node.js 4.0.0はNodeとiojsの統合後にリリースされた最初の安定バージョンであり、開発者に大量のES 6言語拡張をもたらしています.Node.jsに含まれるES 6言語拡張を理解する.この授業では、これらの新しい特性の使い方を紹介します.
Node.js 4.0.0は最先端の技術をお楽しみいただけます.プロジェクトの先進性を維持します.v 8のアップグレードはほとんどChromium/Google Chromeと同期して4.5 xに達し、多くの新しい言語機能を提供しています.ECMA-622はJavaScript言語規範の最新バージョンであり、多くの新特性数は開梱しています.これらの新しい特性は以下を含む.
  • clases-各種類の‘クラス’は、もはやCoffeeScriptの文法糖類を使う必要がない
  • です.
  • generators-未来の.jsコードには無数のジェネレータがあります.勉強しないとJSコードが分かりません.
  • collection−集合、マッピング、弱集合、弱マッピング
  • アロウズ機能
  • block scopingn-let、const機能領域を使用して、ブロック管轄領域
  • template stings-テンプレート文字列
  • promises-標準化された方法で遅延と非同期計算を行う
  • smbors-唯一の、修正できないデータ
  • 厳格モード
    厳密モードは、意味的には通常のJavaScriptとは少し違っています.まず、厳格なモードはJavaScriptトラップを直接明らかなエラーにします.その次に、厳格なモードはいくつかエンジンの最適化しにくい誤りを修正しました.同じコードがある時、厳格なモードは非厳格モードよりもっと速いです.第三に、厳格なモードは、将来のバージョンで定義される可能性のあるいくつかの構文を無効にします.
    私達のECMAScript 6の中のいくつか特性のため、必ず厳格なモードの下で、やっと使うことができて、間違いを報告しません.
    厳密なモードは、スクリプトラベル全体または特定の関数に適用できます.
    すべての語句の前に特定の語句「use strict」を置く必要があります.(または‘use strict’;)
    //               
      "use strict";
       let v = "Hi!  I'm a strict mode script!";
    
    同じように、ある関数に厳しいモードを開くには、「use strict」を使います.(または'use strict')ステートメントは、関数のすべてのステートメントの前に漏れなく置いてあります.
    function strict()
    {
      //           
      'use strict';
      return "Hi!  I'm a strict mode function!" ;
    }
    function notStrict() { 
      return "I'm not strict.";
    }
    
    let
    letは変数のスコープをブロックレベルドメインに制限することができます.varとは違って、変数は大域か、関数級か、ブロックレベルではないということです.
    let vs var
    letのスコープはブロックで、varのスコープは関数です.
    'use strict';
    var a = 5;
    var b = 10;
    if (a === 5) {
      let a = 4; // The scope is inside the if-block
      var b = 1; // The scope is inside the function
      console.log(a);  // 4
      console.log(b);  // 1
    } 
    console.log(a); // 5
    console.log(b); // 1
    
    letはサイクル中です
    グローバル変数(varを使用して)定義ではなく、letキーバインディング変数を使用することができます.
    'use strict';
    for (let i = 0; i < 10; i++) {
      console.log(i); // 0, 1, 2, 3, 4 ... 9
    }
    console.log(i); // i is not defined
    
    上記のエラーは、変数iがfor文以外の作用領域に存在しないためです.letはブロックレベルのスコープ変数を作成し、varを使用してグローバル変数を作成します.
    コンサート
    constという宣言は、全体的または部分的な関数的声明を作成する定数を作成します.
    一つの定数は大域的または局所的であり、定数は変数と同じ作用領域規則に従うことができる.
    一つの定数は、再割り当てされてはいけません.また、ステートメントを繰り返してはいけません.したがって、一つの定数を宣言するときは初期化しないことができますが、これは意味がありません.この定数の値は常にundefinedを維持します.
    一つの定数は、そのスコープ内の他の変数や関数と同じ名前を持つことはできません.

    以下の例では定数の挙動を実証した.
    const num = 10;
    num =20;
    console.log(num); // 10
    
    上に常量numを宣言したら、var numを宣言します.この時に間違いを報告します.numはすでに声明しました.
    const num = 10;
    var num = 20;
    console.log(num); // 'num' has already been declared
    
    ブロックレベルのスコープ
    多くの言語にはブロックレベルのスコープがありますが、JavaScriptはvar宣言変数を使用して、functionでスコープを区分します.varで宣言された変数は、変数を上げる効果があります.
    ES 6にletを追加しました.{}if、forに声明してもいいです.使用法は同じvarであるが、作用域はブロックレベルに限定され、let宣言の変数には変数が存在しない.
    'use strict';
    function f1() {
      var a = 1;
      let n = 2;
      if (true) {
          var a = 20;
          let n = 10;
      }
      console.log(n); // 2
      console.log(a); // 20
    }
    f1();
    
    クラス宣言とクラス表式
    ES 6のクラスは実際には関数であり、関数の定義の仕方に関数宣言と関数式があるように、クラスの定義の仕方にも2種類があります.
    クラス宣言
    クラス声明は定義クラスの一つの方式で、次のように、クラス名のあとにクラス名(ここではPloygon)を使って、一つのクラスを定義することができます.
    'use strict';
    class Polygon {
      constructor(height, width) {
        this.height = height;
        this.width = width;
      }
    }
    
    変数の昇格
    クラス宣言と関数宣言の違いは、関数宣言には変数の昇格現象がありますが、クラス宣言はありません.つまり、先にクラスを明確にしてから使用する必要があります.さもなければ、コードは投げられます.ReferenceErrは異常です.次のようにします.
    var p = new Polygon(); // ReferenceError
     
    class Polygon {}
    
    クラス表式
    クラス表式は定義クラスのもう一つの方法であり、関数式のようにクラス名はなくてもいいです.クラス名が定義されている場合、クラス名はクラス内でのみアクセスできます.
    'use strict';
    //       
    var Polygon = class {
      constructor(height, width) {
        this.height = height;
        this.width = width;
      }
    };
    //       
    var Polygon = class Polygon {
      constructor(height, width) {
        this.height = height;
        this.width = width;
      }
    };
    
    構造関数
    クラスのメンバーはペアの括弧で定義する必要があります.括弧の中のコードと括弧自体はクラス体を構成しています.クラスの構成員は、静的な方法および例示的な方法を含むコンストラクタおよびクラスの方法を含む.
    classはconstructor方法によってオブジェクトを作成し、初期化します.
    constructorメソッドは、カテゴリのデフォルトの方法であり、newコマンドによりオブジェクトインスタンスを生成する場合、自動的に起動します.一つのクラスは一つのconstructor方法しかないです.もし明示的な定義がないなら、一つの空きのconstructor方法はデフォルトで追加されます.constructor() {}constructorメソッドは、デフォルトではインスタンスオブジェクト(this)を返します.他のオブジェクトを返すように指定できます.
    'use strict';
    class Foo {
      constructor() {
        return Object.create(null);
      }
    }
    new Foo() instanceof Foo
    // false
    
    上記のコードの中で、constructor関数は全く新しいオブジェクトを返します.結果として、インスタンスオブジェクトはFooクラスのインスタンスではありません.
    constructor方法は、静的な方法でもないし、例示的な方法でもない特殊な方法であり、1つのクラスを実装するときにのみ呼び出される.一つのクラスはconstructorという方法しか持っていません.そうでないとSyntxErrが異常に投げ出されます.
    厳格モード
    クラスやモジュールの内部は、デフォルトは厳しいモードですので、use strickを使って運転モードを指定する必要はありません.あなたのコードがクラスやモジュールに書いてある限り、厳格なモードだけが利用できます.
    静的方法
    staticキーワードは、クラスの静的方法を定義しています.静的方法は、例示的なクラスを必要とせず、クラスを実装することができると呼ばれる.静的方法は、一般的にアプリケーションのための実用的な関数を作成するために用いられる.
    'use strict';
    class Point {
        constructor(x, y) {
            this.x = x;
            this.y = y;
        }
     
        static distance(a, b) {
            const dx = a.x - b.x;
            const dy = a.y - b.y;
     
            return Math.sqrt(dx*dx + dy*dy);
        }
    }
     
    const p1 = new Point(5, 5);
    const p2 = new Point(10, 10);
     
    console.log(Point.distance(p1, p2));
    
    extensキーワードを使ってサブクラスを作成します.
    extensのキーワードは、あるクラスを引き継ぐサブクラスを作成するために使用できます.
    この例は、Animal類という名前に基づいて、Docgというクラスを作成します.
    'use strict';
    class Animal { 
      constructor(name) {
        this.name = name;
      }
     
      speak() {
        console.log(this.name + ' makes a noise.');
      }
    }
     
    class Dog extends Animal {
      speak() {
        console.log(this.name + ' barks.');
      }
    }
    var dog = new Dog('NiNi');
    dog.speak();
    
    もっと多い例とオンライン練習はここに行ってみてもいいです.http://www.hubwiz.com/course/561e0c8a1bc20c980538e1e8/