本書はECMAScript 6(正式名称はECMAScript 2015)について解説したものです。これはJavaScriptの新しいバージョンです。
本書を理解するには、JavaScriptの知識が必要です。JavaScriptをまだ知らない場合は、私の別の著書「Speaking JavaScript」をご利用ください。これはオンラインで無料で入手でき、ECMAScript 5までを含むJavaScriptのすべてをプログラマーに教えます。
本書はES6を3つの詳細レベルで解説しています。
その他知っておくべきこと
ES6機能の実装が存在するずっと前から本書の執筆を開始したため、かなりの量の調査が必要でした。重要な情報源は以下の通りです。
ECMAScript 5では言語モードが導入されました。厳格モードは、セマンティクスを変更し、より多くのチェックを実行し、より多くの例外をスローすることで、JavaScriptをよりクリーンな言語にします。「Speaking JavaScript」の「厳格モード」セクションで詳細を確認してください。レガシー/デフォルトモードは非厳格モードまたは非厳格モードと呼ばれます。
厳格モードは、次の行(ECMAScript 5以前のバージョンでは何も行いません)を使用して有効にします。
'use strict'
;
この行をファイルの先頭に配置すると、そのファイル内のすべてのコードが厳格モードになります。この行を関数の最初の行にすると、その関数だけが厳格モードになります。
ディレクティブを使用して厳格モードを有効にすることは、あまりユーザーフレンドリーではなく、ES5での厳格モードの普及率が低い理由の1つでした。しかし、ES6モジュールとクラスは暗黙的に厳格モードになっています。ほとんどのES6コードはモジュールに存在するため、厳格モードはES6の事実上のデフォルトになります。
「プロトコル」という用語は、コンピューティングにおいてさまざまな意味を持ちます。プログラミング言語とAPI設計のコンテキストでは、次のように使用しています。
プロトコルは、インターフェース(メソッドや関数のシグネチャ)とそれらを使用するためのルールを定義します。
サービスを実行する方法を指定することが目的です。そうすれば、誰でもサービスを実行でき、誰でも要求でき、確実に連携して動作することが保証されます。
ここで示した定義は、プロトコルをインターフェースと見なすもの(たとえば、Objective Cのように)とは異なります。これは、この定義にはルールが含まれているためです。
メソッド呼び出しobj.m(···)
の場合、obj
はメソッド呼び出しのレシーバーであり、メソッド内ではthis
を介してアクセスできます。
関数の(型)シグネチャは、関数の呼び出し方法、入力と出力の内容を記述します。本書では、Microsoft TypeScriptとFacebook Flowによって確立された構文を使用しています。シグネチャの例:
parseInt
(
string
:
string
,
radix
?
:
number
)
:
number
parseInt()
は文字列と数値を期待し、数値を返すことがわかります。パラメーターの型が明確な場合は、型注釈を省略することがよくあります。
ES6言語仕様では、内部スロットを使用して内部データを格納します。仕様では、内部スロットは、名前が角かっこで囲まれたプロパティであるかのようにアクセスされます。
O
.[[
GetPrototypeOf
]]()
プロパティと異なる点が2つあります。
[[Prototype]]
です。そのスロットの値はJavaScriptから直接読み取れませんが、Object.getPrototypeOf()
を使用して読み取ることができます。内部スロットがどのように格納されるかは、未定義のままです。実際には、一部のJavaScript実装には存在しない場合もあります。
ECMAScript仕様では、環境と呼ばれるデータ構造を使用して、スコープの変数を格納します。環境は基本的に、変数名と値をマッピングする辞書です。バインディングは環境のエントリであり、変数の記憶領域です。
破壊的演算(メソッド、関数)は、そのパラメーターまたはレシーバーを変更します。たとえば、push()
はそのレシーバーarr
を変更します。
> const arr = ['a', 'b'];
> arr.push('c')
3
> arr
[ 'a', 'b', 'c' ]
対照的に、concat()
は新しいArrayを作成し、そのレシーバーarr
は変更しません。
> const arr = ['a', 'b'];
> arr.concat(['c'])
[ 'a', 'b', 'c' ]
> arr
[ 'a', 'b' ]
クラスC
のAPIは通常、次のように文書化されます。
C
コンストラクタC
メソッドC.prototype
メソッド英語では、JavaScriptの用語を次のように大文字で表記します。
String
:そのメンバーは、String
のインスタンスであるオブジェクトです。string
:そのメンバーはプリミティブ値である文字列です。map()
と区別するため。GitHubのいくつかのリポジトリには、本書で示されているコードが含まれています。
async-examples
babel-on-node
demo_promise
generator-examples
node-es6-demo
promise-examples
webpack-es6-demo
サイドバーは、アイコンでマークされたテキストボックスです。通常のコンテンツを補完します。
時々、脚注を介して(公開されている)外部資料を参照します。2つのソースは、角かっこで接頭辞を付けてマークされています。