今後の機能では、いくつかの有用なのJavaScriptで見てみましょう。あなたはそれらの文法、リンクが表示されます、そして、彼らは進歩を理解するとき、私たちはこれらの提案を始める方法を示すために、小さなテストスイートを書きます!
どのようにJavaScriptが反復更新され
あなたは既に精通している場合はEcma TC39委員会は、変更とJavaScript言語に対処することを決めたか、このセクションをスキップすること自由に感じなさい。
私たちの残りの部分については好奇心の開発のためのJavaScriptプログラミング言語は、私は、プロセスの概要をする方法。
JavaScriptが呼び出されたECMAScriptのすべての標準言語を作成するために使用される実装言語の標準、達成するために、それが初期のWebブラウザから開発されたので、。
8つのバージョンがありましたのECMAScript標準、7つのバージョン(第四版が放棄)があります。
各JavaScriptエンジンは、各リリースの後に指定された変更の実装を開始します。このチャート表は、各機能ごとにエンジンが実装することがない表示され、いくつかのエンジンは長く、他のエンジンよりも、これらの機能を実現する必要があります。この一方で、最良のように見えるが、私はそれが無い標準よりも優れていると信じていないかもしれません!
提案
監査提案の過程で、それぞれのECMAScriptバージョン。提案が考慮されている場合に有用との下位互換性は、次のバージョンに含まれます。
で提案の5段階ありますが、この文書の概要が。各提案は、もともと「strawman」または提案されたステージ0を。このレベルでは、彼らはどちらか、まだ技術委員会に提出されていない、または拒否、まだ起動していない標準の次のフェーズにされていません。
以下に示す提案は0段目に属していません。
個人的な勧告として、私は、彼らが不安定な段階になるまで、本番アプリケーションでは、位相0の提案の使用を避けるために、読者を奨励したいです。この勧告の目的は、提案が捨てられたか、根本的に変更された場合にのみ発生する問題を回避することです。
テストスイート
これは、ショーは、コンテキストからの抜粋、またはアプリケーションを構築するためにそれらを使用し、通常のプログラミング機能について説明します。私はのでTDD忠実なファン、私は機能の役割を理解するためのより良い方法は、それをテストすることであると信じています。
我々が使用するジム・ニューカークは、この目標を達成するためにテストを学ん作成 _._、我々は我々自身のコードについて、しかし、プログラミング言語そのものについてのテストはなりませんアサーションを記述します。サードパーティのAPI、または他の言語機能を学習するとき、この同じ概念は非常に便利です。
Transpilers
あなたは、コンバータに精通している場合、このセクションをスキップすること自由に感じなさい。
一部の人々は、我々はまだ実装されていない言語機能を使用する方法を不思議に思われるかもしれません!
それのいくつかはJavaScriptをJavaScript-のにコンパイルされるとJavaScriptは、進化した言語であるコンバータ。それは表面上で非常に参考に聞こえるかもしれないが、私はあなたを保証します!
実行しているときに、今日の環境では、このようなWebブラウザやNode.js.として、まだそれを実行することができる-でも、ゼロステージの提案を含む-それは私達のJavaScriptの最新バージョンを書くことができますはJavaScriptの古いバージョンに我々のコードを変更することで、それをこの目的を達成するために書きます。
バベルは、最も人気のあるJavaScriptのトランスポンダの一つです。我々はすぐにそれを使用します。
ステップ
これを行うには、新しいディレクトリで次のコマンドを実行できます。
npm init -f && npm i [email protected] @babel/[email protected] @babel/[email protected] @babel/[email protected] @babel/[email protected] @babel/[email protected] @babel/[email protected] --save-dev
その後、あなたはpackage.jsonファイルに以下を追加する必要があります。
"scripts": { "test": "ava"},"ava": { "require": [ "@babel/register", "@babel/polyfill" ] }
最後に、.babelrcファイルを作成します。
{ "presets": [ ["@babel/preset-env", { "targets": { "node": "current" } }], "@babel/preset-stage-0" ], "plugins": [ "@babel/plugin-transform-runtime" ]}
今、あなたはいくつかのテストを書き始める準備が整いました!
1.オプションのリンク
JavaScriptでは、我々は、オブジェクトを使用しています。時には、これらのオブジェクトは、我々の期待の正確な形状ではありません。以下は、人工データオブジェクトの例を見つける - にデータベースやAPIの呼び出しから取得することができます。
const data = { user: { address: { street: 'Pennsylvania Avenue', }, },};
ああ、利用者が登録を完了していないようです。
const data = { user: {},};
私は、アプリケーションのダッシュボードストリートにアクセスしようとすると、私は次のエラーを取得する、と仮定します。
console.log(data.user.address.street);
// Uncaught TypeError: Cannot read property 'street' of undefined
次のようにこれを避けるために、私たちは今、「ストリート」属性にアクセスする必要があります。
const street = data && data.user && data.user.address && data.user.address.street;console.log(street);
// undefined
私の意見では、このアプローチは次のとおりです。
- 見苦しいです
- わずらわしいです
- ぶらぶら歩きます
ここで任意の場所へのリンクです。あなたはこのようにそれを使用することができます:
console.log(data.user?.address?.street);
// undefined
それは右、簡単ですか?今、私たちは私たちが綿密な研究を続行することができ、この機能の有用性を見てきました。
だから我々はテストを記述する必要があります!
今、私たちは前の関数の表記のドットを維持するためのオプションのリンクを参照してください。次に、のは不快なパスのテストを追加してみましょう。
以下は、属性の配列にアクセスする方法のための任意のリンクです:
時々、私たちは関数がオブジェクトで実現されているかどうかわかりません。
Webブラウザを使用する際の一般的な例です。一部の古いブラウザでは一部の機能を持っていないかもしれません。幸いなことに、我々は機能が達成されたかどうかを検出するには、オプションのリンクを使用することができます!
チェーンが完了していない場合、式は実行されません。舞台裏で、表現おおまかに:
value == null ? value[some expression here]: undefined;
任意の連鎖演算子の後に何もありませんか?値が未定義またはnullである場合、それが実行されます。私たちは、次のテストでは、この規則の実用化を見ることができます:
これで!オプションのリンクはif文、lodash、などと使用&&リンクのニーズに合わせてインポートライブラリを低減します。
注意の言葉:あなたは、いくつかの最小のオーバーヘッドをもたらし、このオプションのチェーンに気づくことがあります。あなたはそれぞれのレベルを確認しますか?特定の条件下でフードのロジックに含まれている必要があります。過剰使用した場合、パフォーマンスが失われます。あなたが受け取るか、オブジェクトを作成するときに、私は、オブジェクトの検証のいくつかの種類のためにそれを使用することをお勧めします。これは、パフォーマンスの低下を制限する、これらのチェックのための需要が制限されます。
リンク
これはの提案ですリンク。あなたが一箇所ですべての提案へのリンクを見ることができるので、私は、この記事の一番下にそれをコピーします!
2.合併はnull
マージ:またはヒューズ一緒に
ここでは、JavaScriptで参照いくつかの一般的なアクションは次のとおりです。
- チェック未定義またはnull
- デフォルト設定値
- 偽の0を、確認して、空の文字列はデフォルトではありません。
あなたはこのようにそれを見ていることがあります。
value != null ? value : 'default value';
それとも、この:
value || 'default value'
問題は、第二の実施のために、私たちの第3の動作条件が満たされていない、ということです。この場合、数ゼロ、ブール値FALSEと空の文字列は偽として扱われます。これは、我々がnullとundefinedの理由でチェックをクリアしなければならないものです。
value != null
これは、次のとおりです。
value !== null && value !== undefined
どこの新提案(無効な合併を)です。今、私たちはこれを行うことができます:
value ?? 'default value';
これは、我々が誤って偽の値をデフォルトではないが、それでも三元ではないだろうとか、それらを保護することができます!キャプチャnullとundefinedケース= nullをチェック。
今、我々はそれがどのように動作するかを検証するための簡単なテストを書くことができ、文法を参照してください。
あなたは未定義、ヌルの使用をテストでそれを見ることができますし、(計算結果は未定義である)0デフォルトは無効。それは、このような0、「と偽として、偽の値をデフォルトされません。では、このビューGitHubの。
3.パイプライン演算子
関数型プログラミングでは、用語「持って組み合わせ、複数の関数呼び出しが動作をリンクされています」、。その入力の関数として前の関数の1つの出力を受け取ります。以下は、純粋なJavaScriptで我々の議論の例です。
function doubleSay (str) { return str + ", " + str;}
function capitalize (str) { return str[0].toUpperCase() + str.substring(1);}
function exclaim (str) { return str + '!';}
let result = exclaim(capitalize(doubleSay("hello")));result //=> "Hello, hello!"
このシリーズは、機能の組み合わせのように、ほとんどの図書館で見つけたので、一般的であるlodashとRAMDA。
新しいパイプライン演算子を使用して、次のように書かれたプレス上に示したサードパーティ製のライブラリをスキップすることができます。
let result = "hello" |> doubleSay |> capitalize |> exclaim;result //=> "Hello, hello!"
目的は、チェーン_ _を読みやすくすることです。また、アプリケーションの次の部分でうまくいくか、それが今、このような何かを達成することができます:
let result = 1 |> (_ => Math.max(0, _));result //=> 1
let result = -5 |> (_ => Math.max(0, _));result //=> 0
今、私たちは文法を参照してください、我々はテストを書き始めることができます!
あなたが気づくことの一つは、パイプラインは、非同期機能を追加したら、あなたは値を待たなければならないということです。値がコミットされているためです。そこにいくつかある提案された変更の >待機asyncFunctionが、実装または決定されていない|サポート。
さて、あなたはこれらの勧告の実用化を見てきたことから、私はあなたがこれらの提案を試してみてくださいね!
学習は、ここに完全なコードをテストすることができたこと。
以下は、すべての4つの提案へのリンクです:
TC39 /提案型・オプションの連鎖 GitHub._github.com上でアカウントを作成することで、開発を提案・オプション・チェーン接続に_Contributeを []( HTTPS://github.com/TC39/propo ...
TC39 /提案-nullish-合体 _proposal-nullish-合体- Nullish提案Xを合体?y_github.com []( HTTPS://github.com/tc39/propo ...
TC39 /提案型部分のアプリケーション _proposal-部分のアプリケーション- ECMAScript_github.comに部分的にアプリケーションを追加するための提案 []( HTTPS://github.com/tc39/propo ...
TC39 /提案パイプラインオペレータ _proposalパイプラインオペレータ- JavaScript._github.comに単純なく、有用なパイプライン演算子を追加するための提案 []( HTTPS://github.com/tc39/propo ...