カイル・シンプソンが書いた本「ES6 and Beyond」(英語版「ES6&Beyond」)に注意を払いたい。 もちろん、彼は貢献しただけでなく、多くの素晴らしい貢献者もいました。 謝辞
現時点では、ステータスは-完成したドラフトです。
目次:
- 第1章:ES? 現在と未来
- 第2章:構文
- 第3章:組織
- 第4章:非同期フロー制御
- 第5章:コレクション
- 第6章:アドオンAPI
- 第7章:メタプログラミング
- 第8章:ES6を超えて
この本を読み始める前に、あなたはすでに(この本を書いている時点で)最も人気のある標準(通常はES5と呼ばれます)(技術的にはES5.1)までのJavaScriptの確かな知識を既に持っていると思います。 ここでは、今後のES6標準について説明し、JSのさらなる発展を理解しようとします。
ES6は、ES5のように言語に追加されたささやかな新しいAPIのセットではありません。 これには多くの新しい構文形式が含まれており、それらを理解するのは習慣になるまで時間がかかる場合があります。 いくつかの新しい組織フォームと、既存のデータ型の多くのヘルパーを備えた新しいAPIも登場しました。
ES6は根本的な進歩です。 JS(ES5)を知っていると思われる場合でも、ES6にはまだ学習しなければならない新しいことがたくさんあります。 準備をしなさい! この本はES6のすべての主要なトピックを網羅しており、ES6にすばやく慣れるのに役立ち、さらに新しい変更に備えて将来に目を向けます。
注:本書のすべてのコードにはES6環境が必要です。
バージョニング
JavaScriptは正式には「ECMAScript」(略称「ES」)と呼ばれ、最近までバージョンは整数でした(つまり、「5」、「5th edition」)。
ES1およびES2の初期バージョンは広く実装されていませんでしたが、ES3は最初に広く受け入れられたJavaScriptフレームワークでした。 ES3は、IE6-8や古いAndroid 2.xモバイルブラウザーなどのブラウザーのJavaScript標準です。 ES4は「政治的」な理由から、考慮しません。 この標準は廃止されました。
2009年に、ES5は正式に完成し(2011年のES5.1以降)、Firefox、Chrome、Opera、Safariなどのブラウザ全体の広範な標準になりました。
JSの次のバージョン(2013年、2014年、2015年)を予想して、新しいレーベルについて最も話題になったのはES6でした。
ただし、ES6仕様テープの後半では、バージョン管理モデルの下部に年次マークを付ける必要があるという提案が浮上しました。 たとえば、ES2016(ES7)は、2016年末に標準が完成したことを意味します。 多くの人がこれに反対しており、いずれにしてもES6の名前を変更するのは遅すぎます。 しかし、実際には、同様のバージョン化されたモデルが可能です。
また、単純な観察のおかげで、JSの進化は年次バージョン管理よりも速く進んでいると言えます。 議論の中で新しい標準のアイデアが進歩し始めるとすぐに、ブラウザーは機能(関数、API)のプロトタイプを作成し始め、それらをコード実験に早期に適応させます(すべて実験フラグを知っています)。
通常、公式の承認スタンプが押される前に、事実上の言語機能は初期のプロトタイプ作成のおかげで標準化段階を経ます。 したがって、現在使用されている年間モデルまたは基本機能の事前収集のモデルではなく、新しい事前機能に基づく将来のJSバージョン管理モデルについて話す価値があります。
ES6のようなバージョンラベルはもはや重要ではなく、JavaScriptは一種の常緑生活標準であるべきだということを紹介します。 タグを克服する最良の方法は、コードがES6バージョンに依存していると考えるのをやめて、さらなるサポートのために機能ごとにサポートすることです。
トランスパイリング
言語の新機能を使用したい開発者にとって、それらをサポートしていない古いブラウザでアプリケーション/サイトをサポートする問題があります。
主な考え方は、ほとんどまたはすべての環境がサポート範囲から外れるまで、ES5の採用を期待することでした。 その結果、最近では、たとえば、何年も前にES5に根付いた厳格モードなど、多くの人が独自に物事を実装し始めました。
多くの人は、このような仕様の待機と踏みつけのアプローチがJSエコシステムに有害であることに同意するでしょう。 言語の開発を担当する人々は、開発者が仕様で安定化されるとすぐに、言語の新しい機能とそのパターンを使用することを望みます。 ブラウザにはそれらを実装する機会があります。
それでは、この小さな矛盾をどのように解決しますか? 答えはチューニングです。つまり、この手法はトランスパイルと呼ばれます(変換+コンパイル)。
たとえば、パラメータの短縮宣言を検討します(オブジェクトリテラルについては、第2章で説明します)。 ES6では次のようになります。
var foo = [1,2,3]; var obj = { foo // `foo: foo` }; obj.foo; // [1,2,3]
そして、これはトランスパイリング後にどのように見えるかです:
var foo = [1,2,3]; var obj = { foo: foo }; obj.foo; // [1,2,3]
これは重要ではありませんが、オブジェクトリテラルの記述でfoo:fooを短縮できる優れた変換です。 名前が同じ場合はfooのみを使用します。
開発プロセスでは、通常、トランスパイリングはリンティング、縮小などと同等の場所で行われます。
志摩/ポリフィル
ES6のすべての新機能がトランスコンパイルを必要とするわけではありません。 ポリフィル(シム)は、可能な場合はもちろん、古い環境の新しい環境と同等の動作を決定するようなパターンです。 構文は多親和性にできませんが、APIは可能です。
たとえば、Object.is(..)は、2つの値の厳密な同等性をチェックするための新しいユーティリティですが、例外はありません。値===は値NaNと-0に対して持っています。 Object.is(..)メソッドのポリフィールは非常に単純です:
if (!Object.is) { Object.is = function(v1, v2) { // test for `-0` if (v1 === 0 && v2 === 0) { return 1 / v1 === 1 / v2; } // `NaN` if (v1 !== v1) { return v2 !== v2; } // return v1 === v2; }; }
多相性の周りの外側のラッパーに注意してください-場合。 これは重要な詳細です。つまり、スニペットは、このAPIがまだ実装されていない古い環境に対してのみ定義されます。 既存のAPIをオーバーライドする必要はほとんどありません。
ES6シムと呼ばれるES6シムの素晴らしいコレクションがあり、これを新しいプロジェクトの一部として使用できます。
明らかに、JSはブラウザとともに常に進化します。ブラウザは、大規模なものではなく、徐々に新しい機能を展開します。 したがって、言語の更新と進化に遅れをとらないための最善の戦略は、ベースコードにポリフィルを埋め込み、開発プロセスにトランスパイルを追加して、新しい現実に慣れることです。
現状に固執し、すべてのブラウザーが言語を完全にサポートするのを待つことにした場合は、はるかに遅れます。 JavaScriptをより効率的かつ確実に記述するために発明されたイノベーションをスキップするリスクがあります。
復習
JavaScriptが進化する新しい方法で思考を設定することが重要です。 新しい標準が承認されるまで何年も待たないでください。 現在、新しいJavaScript機能は可能な限りブラウザに実装されています。今すぐ使用する準備ができているかどうかは、あなた次第です。
将来のJavaScriptがどのラベルを受け取るかに関係なく、言語の開発は以前よりもはるかに高速になります。 トランスパイリングとポリフィールは、新しい機会の開発と出現に追いつくための重要なツールです。