第一章:ES?現在と未来

4957 ワード

特に説明します.読みやすいように、文章を自分で変えます.https://github.com/getify/You-Dont-Know-JS
この本に刺さる前に、最近のバージョンのJavaScript、つまりES 5(技術的にはES 5.1)を上手に使うべきです.ここで、私たちはES 6についてよく話しながら、未来を見て、JSがどのように進化していくかを見てみたいです.
JavaScriptで自信を探しているなら、まずシリーズの他の本を読むことを強く勧めます.
  • 入門と階段:プログラミングとJSの初心者ですか?これはあなたが学習の旅路を開く前に確認しなければならない路線図です.
  • 作用領域とクローズド:JSの語法作用領域はコンパイラに基づいていると知っていますか?クローズドがどのように品詞作用領域と関数になっているかを説明できますか?
  • thisとオブジェクトのプロトタイプ:thisによって結合された4つの簡単なルールを復唱できますか?あなたはJSで「類」をパクリすることに対処したことがありますか?他の相手にリンクしていると聞きましたか?
  • タイプと文法:JSの中のインテリアタイプを知っていますか?もっと重要なのは、タイプ間で正確かつ安全に強制変換を使う方法を知っていますか?JS文法/文法の微妙なところにどれぐらいの習慣を感じますか?
  • 非同期と性能:まだフィードバックを使ってあなたの非同期処理を管理していますか?promiseはなぜ/どのように「逆転地獄」を解決したのか説明できますか?どのようにgeneratorを使って非同期コードの読みやすさを改善するか知っていますか?一体何がJSプログラムと独立操作の成熟した最適化を構成していますか?
  • これらの本を読んでいて、内容については十分に楽だと思います.JSの進化過程を深く掘り下げて、将来の変化と未来の変化を探ってみます.
    ES 5と違って、ES 6は言語に追加されたグループだけではなく、あまり多くない新しいAPIです.たくさんの新しい文法形式が含まれています.そのうちのいくつかは相当の時間をかけて適応できます.いくつかの新しい組織形態と様々なデータの種類に追加された新しいAPIがあります.
    この言語にとってES 6は非常に急進的です.ES 5のJSが分かると思っても、ES 6はまだわからない新しいものばかりですから、準備してください.この本はあなたが素早く身につけなければならないES 6の主なテーマを探求しています.そして、あなたが注意すべきことが軌道に乗っている未来の特性を垣間見てみます.
    警告:この本のコードはすべてES 6+の環境で実行されると仮定します.この本を書く時、ブラウザとJS環境(例えば、Node.js)はES 6に対するサポートがかなり違っていますので、あなたの感覚は違ってくるかもしれません.
    バージョン
    JavaScript標準は公式では「ECMAScript」(略語で「ES」といいます)と呼ばれています.しかも最近までは完全に順番数字を使ってバージョンを表記したばかりです.
    最初のバージョンでは、ES 1とES 2は広く知られておらず、広範囲に実装されていません.ES 3はJavaScriptが初めて広く普及する基準線であり、IE 6-8とより早いAndroid 2.xモバイルブラウザのJavaScript標準を構成しています.我々の議論の範囲を超えた政治的理由のために、数奇な運命をたどったES 4が登場したことがない.
    2009年にES 5の正式な定稿(2011年にES 5.1が現れました)は、ブラウザの現代革新と爆発的成長(例えばFirefox、Chrome、Opera、Safari、その他多く)の中で広く伝播され、JS基準として安定してきました.
    次のバージョンのJS(2013年から2014年までとその後の2015年までの内容)は、人々の議論の中で明らかにES 6と呼ばれている.
    しかし、ES 6仕様が遅れている場合、将来のバージョン番号について言及すると、ES 2016(ES 7ともいいます.)を使って2016年末までに投稿されたバージョンのいずれかを指すことになるかもしれません.否定的な意見もあるが、ES 6はその後のES 2015に対して支配的な影響力を維持し続ける可能性が高い.しかし、ES 2016は実は新しい編年制をマークしているかもしれません.
    JSの進化の頻度は、年に一度の定版よりもずっと速いということも見られます.一つの考えが標準化され、討論のプロセスが始まると、ブラウザはこのような特性のためにプロトタイプを作り始めました.そして、初期の採用者はコードの中で実験を始めました.
    通常は、これらの初期のエンジン/ツールのプロトタイプのために、公式の印鑑を押すと、実際には標準化されています.従って、将来のJSバージョンは、一組の主要な特性の任意集合の更新ではなく、一年一年の更新でもないと考えられる.
    簡単に言えば、バージョン番号はもうそんなに重要ではありません.JavaScriptは常青のようになり始めました.その最善の方法は、例えば、あなたのコードライブラリを「ES 6ベース」としないで、サポートされている特性を考慮することです.
    翻訳する
    特性の急速な進化によって、開発者たちに悪い問題をもたらしました.彼らはすぐに新しい特性を使いたいと強く願っています.同時に現実に顔をたたかれました.彼らのウェブサイト/apはこれらの特性を支持しない古いバージョンのブラウザをサポートする必要があります.
    業界全体でES 5の方式はもう天に帰る力がないようです.その典型的な考え方は、コードバンクがほとんどすべての前ES 5環境を待っています.それらのサポートシステムから除名してからES 5を採用し始めます.その結果、多くの人が最近(本を書く時)にstrictというモデルを採用し始めましたが、5年前にES 5に寄稿しました.
    JS生態系の未来にとって、待ち時間と遅れは言語規範であれば、長年にわたって広く有害な方法と考えられています.言語の発展を推進するすべての人がこのようなことを望んでいます.新しい特性とモードが仕様として安定し、ブラウザがそれらを実現する機会があれば、開発者はこれらの新しい特性とモードに基づいて符号化を開始する.
    これは矛盾しているように見える問題をどう解決しますか?答えはツールで、特にトランジットという技術(変換+コンパイル)です.概して、ES 6コードは特別なツールを使ってES 5環境で動作できる等価物(または類似物)に変換するという考えです.
    例えば、属性定義の略語(第二章の「対象字面拡張」を参照)を考慮します.これはES 6の形式です.
    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: foofooと略し、もし名前が同じならば.
    変換器はこれらの変形を実施するために、このプロセスは通常ワークフローを構築するためのステップである.
    カバー(Shims/Polyfills)
    すべてのES 6の新特性ではなく、変換器が必要です.補填(shimsともいう)は、可能な場合には、新しい環境の挙動のために、古い環境で実行できる等価挙動を定義するモードである.文法は埋まらないですが、APIはよくできます.
    例えば、Object.is(..)は、2つの値の厳密な等価性を検査するための新しいツールであり、===NaNおよび-0の値に対するそのような微妙な例外を持たない.Object.is(..)のカバーはかなり簡単です.
    if (!Object.is) {
        Object.is = function(v1, v2) {
            //    `-0`
            if (v1 === 0 && v2 === 0) {
                return 1 / v1 === 1 / v2;
            }
            //    `NaN`
            if (v1 !== v1) {
                return v2 !== v2;
            }
            //        
            return v1 === v2;
        };
    }
    
    ヒント:外部のif文がカバーの内容を保護的に取り囲んでいることに注意します.これは重要な詳細であり、このコードセグメントはこのAPIがまだ定義されていない古い環境のために定義されたバックアップ挙動だけを意味する.既存のAPIをカバーしたいという状況は非常に珍しいです.
    「ES 6 Shim」と呼ばれるものがあります.https://github.com/paulmillr/es6-shim/素晴らしいES 6の集合をカバーします.新しいJSプロジェクトの標準構成部分に絶対に取り入れるべきです.
    JSはこれまでにない進化を続けているように見えますが、同時にブラウザも大きなサイズのアップデートではなく、新しい特性をサポートするために小さなステップで反復します.従って、時代に追いつくための最善策は、あなたのコードバンクに補填を導入し、あなたの構築プロセスにトランスポンダのステップを導入して、今から新しい現実に慣れます.
    現状を維持すると決めたら、新しい特性をサポートしないブラウザが全部消えてから新しい特性を使い始めると、いつも時代に遅れてしまいます.悲しいことに、すべての新発明の設計を逃します.JavaScriptをより効果的に作成し、より効率的に丈夫にします.
    復習する
    ES 6(ES 2015と呼ばれる人もいます.)この本を書く時に原稿を決めたばかりです.勉強したいことがたくさんあります.
    しかし、もっと重要なのは、あなたの思考パターンをJavaScriptの新しい進化の方法に結びつけることです.いくつかの公式文書の投票を待つためだけに、何年も費やすのではなく、前の多くの人が作ったように.
    今はJavaScriptの特性が準備されればブラウザで実現されます.今は始発のバスに乗るかどうかはあなたが決めます.
    未来のJavaScriptはどのようなラベルを採用しても、以前よりずっと速いスピードで前進します.あなたがこの言語の進行方向の先頭に立つためには、翻訳と補填が不可欠です.
    JavaScriptの新しい現実に何か重要なことがあるというなら、すべてのJS開発者は後進の端から先頭に移動するよう強く求められています.ES 6を学ぶのはこのすべての始まりです!