はじめに
ECMAScript6は、ECMAScript2015としても知られており、ECMAScript標準の最新バージョンです。 ES6は言語に対する重要な更新であり、ES5は2009年に標準化されて以来、言語に対する最初の更新です。 主要なJavaScriptエンジンでのこれらの機能の実装は現在進行中です。
ECMAScript6言語の完全な仕様については、ES6標準を参照してください。,
ES6には、次の新機能が含まれています。
- 矢印
- クラス
- 拡張オブジェクトリテラル
- テンプレート文字列
- 構造化
- default+rest+spread
- let+const
- イテレータ+for。.,モジュールローダー
- map+set+weakmap+weakset
- プロキシ
- シンボル
- サブクラス可能な組み込み
- promises
- 数学+数値+文字列+配列+オブジェクトApi
- バイナリおよびオクタルリテラル
- テールコール
api
ecmascript6の機能
矢印
矢印は、=>
構文を使用した関数の省略形です。 これらは、c#、Java8、CoffeeScriptの関連機能と構文的に似ています。, これらは、ステートメントブロック本体と、式の値を返す式本体の両方をサポートします。 関数とは異なり、矢印は周囲のコードと同じ字句this
を共有します。
詳細情報:MDN矢印関数
クラス
ES6クラスは、プロトタイプベースのOOパターンに対する単純な砂糖です。 単一の便利な宣言形式を持つことは、クラスパターンを使いやすくし、相互運用性を促進します。 授業支援の試作に基づく継承、スーパー、インスタンスは、staticメソッドは、コンストラクタ.,
詳細情報:MDNクラス
拡張オブジェクトリテラル
オブジェクトリテラルは、構築時のプロトタイプの設定、foo: foo
割り当て、メソッドの定義、スーパーコール、式によるプロパティ名の計算をサポートするように拡張されています。 これらはまた、オブジェクトリテラルとクラス宣言をより緊密にし、オブジェクトベースの設計は同じ便利さのいくつかから利益を得ることが,
詳細情報:MDN文法と型:オブジェクトリテラル
テンプレート文字列
テンプレート文字列は、文字列を構築するための構文的な砂糖を提供します。 これは、Perl、Pythonなどの文字列補間機能に似ています。 オプションとして、タグを追加して、文字列構成をカスタマイズし、注入攻撃を回避したり、文字列の内容からより高いレベルのデータ構造を構築したり
詳細情報:MDNテンプレート文字列
デストラクチャリング
デストラクチャリングでは、配列とオブジェクトのマッチングをサポートして、パターンマッチ, デストラクチャリングは、標準のオブジェクト検索foo
と同様にフェイルソフトで、見つからないときにundefined
値を生成します。
詳細情報:MDN構造化割り当て
Default+Rest+Spread
呼び出し先が評価した既定のパラメーター値。 関数呼び出しで配列を連続した引数に変換します。 結合する最後のパラメータを配列に格納します。 Restはarguments
の必要性を置き換え、より直接的に一般的なケースに対処します。,
function f(x, y=12) { // y is 12 if not passed (or passed as undefined) return x + y;}f(3) == 15
function f(x, ...y) { // y is an Array return x * y.length;}f(3, "hello", true) == 6
function f(x, y, z) { return x + y + z;}// Pass each elem of array as argumentf(...) == 6
More MDN info: Default parameters, Rest parameters, Spread Operator
Let + Const
Block-scoped binding constructs. let
is the new var
. const
is single-assignment. Static restrictions prevent use before assignment.
function f() { { let x; { // okay, block scoped name const x = "sneaky"; // error, const x = "foo"; } // error, already declared in block let x = "inner"; }}
More MDN info: let statement, const statement
Iterators + For..,/H3>
イテレータオブジェクトは、CLR IEnumerableやJava Iterableなどのカスタム反復を有効にします。 for..in
をfor..of
を使用したカスタムイテレータベースの反復に一般化します。 配列を実現する必要はなく、LINQのような遅延デザインパターンを有効にします。
反復は、これらのダック型のインターフェイスに基づいています(説明のためのTypeScript型構文のみを使用)。
詳細情報:MDN for。..p>
ジェネレータ
ジェネレータは、function*
およびyield
を使用して反復子オーサリングを簡素化します。, Function*として宣言された関数は、Generatorインスタンスを返します。 ジェネレータは、追加のnext
およびthrow
を含むイテレータのサブタイプです。 これらにより、値がジェネレータに戻ることができるため、yield
は値を返す(またはスローする)式形式です。注:非同期プログラミングのように’await’を有効にするために使用することもできます。ES7await
提案も参照してください。,
ジェネレータインタフェースは(博覧会のみにTypeScript型構文を使用しています):
interface Generator extends Iterator { next(value?: any): IteratorResult; throw(exception: any);}
詳細情報:MDN反復プロトコル
Unicode
文字列内の新しいUnicodeリテラル形式や新しいRegExpu
コードポイントを処理するモードを含む、完全なUnicodeをサポートするための非破壊追加、およびコードポイントを処理するためのモード、およびコードポイントを処理するためのモード、およびコードポイントを処理するためのモードを含む。21bitコードポイントレベルで文字列を処理するための新しいapi。 これらの追加支援ーパーグローバルハイスクールはアプリです。
詳細情報:MDN RegExp。プロトタイプ。,unicode
Modules
コンポーネント定義用のモジュールの言語レベルのサポート。 一般的なJavaScriptモジュールローダー(AMD、CommonJS)からのパターンを成文化します。 ホスト定義のdefault loaderによって定義された実行時の動作。 暗黙のうちに非同期モデル–バーコードを実行するまでに要請モジュールをお使いいただけ処理します。,v>
いくつかの追加機能が含まれますexport default
とexport *
:
// lib/mathplusplus.jsexport * from "lib/math";export var e = 2.71828182846;export default function(x) { return Math.log(x);}
// app.jsimport ln, {pi, e} from "lib/mathplusplus";alert("2π = " + ln(e)*pi*2);
より多くのMDN情報:インポートステートメント、エクスポートステートメント
モジュールローダー
モジュールローダーのサポート:
- 動的ローディング
- 状態分離
- グローバル名前空間分離
- コンパイルフック
- ネストされた仮想化
デフォルトのモジュールローダーを構成でき、新しいローダーを構築して、分離されたコンテキストまたは制約付きコンテキストでコードを評価およびロードすることができます。,
Map+Set+WeakMap+WeakSet
一般的なアルゴリズムのための効率的なデータ構造。 WeakMapsを提供で漏れのないオブジェクト-キーのい側です。
その他のMDN情報:Map、Set、WeakMap、WeakSet
プロキシ
プロキシは、ホストオブジェクトで利用可能な全範囲の動作を持つオブジェクトの作成を可能にします。 傍受、オブジェクトの仮想化、ロギング/プロファイリングなどに使用できます。
すべてのランタイムレベルのメタ操作に使用できるトラップがあります。
詳細情報:MDN Proxy
Symbols
Symbolsはオブジェクト状態のアクセス制御を有効にします。, シンボルを使用すると、プロパティをstring
(ES5のように)またはsymbol
のいずれかによってキー設定できます。 Symbolsは新しいプリミティブ型です。 オプションのdescription
デバッグで使用されるパラメーター-ただし、idの一部ではありません。 シンボルは(gensymのように)一意ですが、Object.getOwnPropertySymbols
ようなリフレクション機能を介して公開されるため、非公開ではありません。
詳細情報:MDNシンボル
サブクラス可能なビルトイン
ES6では、Array
、Date
、DOMElement
のようなビルトインをサブクラス化することができます。,
Ctor
という名前の関数のオブジェクト構築は、Ctor
呼び出しCtor
オブジェクトを割り当て、特別な動作をインストールします
既知の@@create
シンボルは、Symbol.create
で使用できます。 組み込みは、@@create
を明示的に公開します。,
数学+数値+文字列+配列+オブジェクトApi
コア数学ライブラリ、配列変換ヘルパー、文字列ヘルパー、およびオブジェクトを含む多くの新しいライブラリコピーに割り当てます。
より多くのMDN情報:数値、数学、配列。から、配列。の,配列.プロトタイプ。コピーウィズイン、オブジェクトassign
バイナリとオクタルリテラル
バイナリ(b
)とオクタル(o
)に二つの新しい数値リテラル形式が追加されました。
0b111110111 === 503 // true0o767 === 503 // true
Promises
Promisesは非同期プログラミング用のライブラリです。, Promiseは、将来利用可能になる可能性のある値のファーストクラスの表現です。 Promiseは多くの既存のJavaScriptライブラリで使用されます。
詳細情報:MDN Promise
Reflect API
オブジェクトに対するランタイムレベルのメタ操作を公開するフルリフレクションAPI。 これは事実上プロキシAPIの逆であり、プロキシトラップと同じメタ操作に対応する呼び出しを行うことができます。 プロキシの実装に特に便利です。,
// No sample yet
詳細情報:MDNリフレクト
テールコール
テール位置の呼び出しは、スタックを無限に拡大しないことが保証されています。 無制限の入力に直面しても再帰的アルゴリズムを安全にします。