350ポむントでのES6の抂芁。 パヌト1

24゚ントリのES6の詳现な䞀連のメモでは、ES6の構文の倉曎ず革新のほずんどに぀いお説明しおいたす。 この出版物では、以前の蚘事で䞊蚘のすべおを芁玄し、すべおを䞀緒にもう䞀床芋る機䌚を提䟛したす。 たた、必芁に応じお詳现をすぐに確認できるように、ブログにリンクを远加したした。



箇条曞きリストが奜きだず聞いたので、ここに数癟の芁玠で構成されるリストを含む蚘事がありたす。

たず、䜕が議論されるかが明確になるように目次を瀺したす。 明らかに、目次も順序付けられおいないリストです。 泚このトピックをさらに深く掘り䞋げたい堎合は、䞀連の蚘事党䜓を読み 、ES6コヌドを個別に「掘り䞋げお」ください。

内容

●はじめに
●ツヌルキット
●割り圓おの砎棄
●スプレッド挔算子ずレストパラメヌタヌ
●矢印機胜
●テンプレヌト文字列
●オブゞェクトリテラル
●クラス
●Let and Const
●蚘号
●むテレヌタ
●ゞェネレヌタヌ
●玄束
●マップ
●WeakMaps
●セット
●WeakSets
●プロキシ
●リフレクション
●番号
●数孊
●配列
●オブゞェクト
●文字列ずナニコヌド
●モゞュヌル

このような長い目次でごめんなさい。 始めたす。

はじめに

●ES6Harmony、es-next、ES2015ずも呌ばれるは、最新の最終蚀語仕様です。
●2015幎6月にES6の最終仕様が承認されたしたそのためES2015。
●将来の蚀語バヌゞョンには、ES [YYYY]パタヌンに埓っお名前が付けられたすES7のES2016など。
o幎次リリヌスサむクル。䞍可逆的な倉曎は次のリリヌスから機胜し始めたす。
o ES6はこの゜リュヌションよりも前に登堎したため、私たちのほずんどはただES6ず呌んでいたす。
o ES2016ES7以降では、ESテンプレヌト[YYYY]を䜿甚しお新しいバヌゞョンを参照する必芁がありたす。
oこの呜名パタヌンを䜿甚する䞻な理由は、ブラりザヌの補造元に最新の曎新プログラムをできるだけ早く実装するよう圧力をかけるこずです。

ツヌルキット

●珟圚ES6を䜿甚するには、JavaScriptからJavaScriptぞのトランスポヌタヌが必芁です。
●トランスポヌタヌは次の理由で来たした。
o新しいバヌゞョンの蚀語のコヌドを叀いバヌゞョンのコヌドにコンパむルする機胜を提䟛したす。
oブラりザのサポヌトが改善されたら、ES2016およびES2017をES6などに眮き換えたす。
o改善された゜ヌスマッピング機胜が必芁です。
o珟圚、本番環境でES6コヌドを実行する最も信頌性の高い方法ですブラりザヌがES5をサポヌトしおいるずいう事実にもかかわらず。
●babeltranspilerには、人間が読み取れる出力ずいうキラヌ機胜がありたす。
● babelを䜿甚しお、静的ビルド甚にES6をES5にパむプしたす。
● babelifyを䜿甚しお、 うなり声 、 gulp 、たたはnpm実行ビルドプロセスにbabelを埋め蟌みたす。
●重み4.xx以䞊のnodejsを䜿甚したす-ES6には非垞に適切なサポヌトがありたすv8に感謝。
●node.jsの任意のバヌゞョンでbabel-nodeを䜿甚したす-ES5でモゞュヌルをトランスパむルしたす。
●Babelには、ES2016ずいく぀かのプラグむンを既にサポヌトしおいる拡匵゚コシステムがありたす。
● ES6ツヌリングの簡単な歎史を読んでください。

割り圓おの砎壊

●var {foo} = ponyは、var foo = pony.fooず同じです。
●var {foobaz} = ponyはvar baz = pony.fooず同じです
●デフォルト倀を蚭定できたす。var{foo = 'bar'} = bazはfooを返したす。baz.fooが未定矩の堎合、 'bar'になりたす。
●゚むリアスの有無にかかわらず、奜きなだけプロパティをドラッグできたす。
o var {foo、barbaz} = {foo0、bar1}はfoo0およびbaz1。
●さらに進むこずができたすvar {foo{bar}} = {foo{bar 'baz'}}はbar 'baz'を䞎えたす。
●これに゚むリアスを割り圓おるこずもできたす。var{foo{bardeep}} = {foo{bar 'baz'}}は、deep 'baz'を提䟛したす。
●芋぀からなかったプロパティは、未定矩の倉数{foo} = {}を返したす。
●ネストされたプロパティが芋぀からなかった堎合、゚ラヌvar {foo{bar}} = {}が返されたす。
●これは配列に察しおも機胜し、[a、b] = [0、1]はa0およびb1を返したす。
●配列の芁玠[a ,, b] = [0、1、2]をスキップできたす。a0およびb2を取埗したす。
●3番目の「aux」倉数[a、b] = [b、a]に頌らずに倉数を亀換できたす。
●関数パラメヌタヌで構造化を䜿甚するこずもできたす。
oデフォルト倀の割り圓おfunction foobar = 2{};
oこれらの倀はオブゞェクト関数foobar = {a1、b2}{};
o barを完党に砎壊できたすfunction foo{a = 1、b = 2}{};
o䜕も枡されなかった堎合、デフォルトで空の配列を取埗したすfunction foo{a = 1、b = 2} = {}{}。

ES6 JavaScript Destructuring in Depthをお読みください。

スプレッドオペレヌタヌずレストパラメヌタヌ

●残りのパラメヌタヌは匕数のようなもので、より良いだけです。
oメ゜ッドシグネチャは、関数foo... everything{}ずしお宣蚀されたす。
oすべおがfooに枡されるすべおのパラメヌタヌを持぀配列です。
oすべおの前にいく぀かのパラメヌタヌに名前を付けるこずができたす。たずえば、次のずおりです。function foobar、... rest{};
oこれらのパラメヌタヌは...残りから陀倖されたす。
o ... restはリストの最埌のパラメヌタヌである必芁がありたす。
●スプレッド挔算子は魔法よりも優れおいたす。たた、...構文を䜿甚しお瀺されたす。
oメ゜ッドfn... [1、2、3]を呌び出すずきに適甚する必芁がなくなりたす-fn1、2、3ず同じです。
o単玔化された連結[1、2、... [3、4、5]、6、7];
o配列のような芁玠たたはコレクションを配列にブラむンドするこずができたす[... document.querySelectorAll 'img'];
o [a ,, ... rest] = [1、2、3、4、5]を砎棄する堎合にも䟿利です。a1ずrest[3、4、5];
oは、new + .applyをシンプルで新しい日付にしたす... [2015、31、8]。
● ES6スプレッドずバタヌを詳しく読む。

矢印関数

●関数param => returnValueを宣蚀する簡朔な方法。
●関数型プログラミングに有甚、[1、2] .mapx => x * 2。
●それを䜿甚するいく぀かの異なる方法がありたす習慣を開発するのに時間がかかりたす
○パラメヌタが1の堎合、p1 => exprは優れおいたす。
○p1 => exprにはexprの暗黙的なreturnステヌトメントがありたす。
○暗黙的にオブゞェクトを返すには、括匧=>{foo 'bar'}で囲む必芁がありたす。そうしないず、゚ラヌが発生したす。
○0、2、たたはそれ以䞊のパラメヌタがある堎合は括匧が必芁です=> exprたたはp1、p2=> expr;
○右偎の䞭括匧はコヌドブロックを衚し、耇数の呜什を含めるこずができたす=> {};
○この構文を䜿甚する堎合、暗黙の戻り倀はありたせん。蚘述する必芁がありたす=> {return 'foo'}。
●矢印関数に静的に名前を付けるこずはできたせんが、名前のないほずんどのメ゜ッドのパフォヌマンステストははるかに優れおいたす。
●矢印関数は語圙環境に関連付けられおいたす。
○これは、芪の字句環境ず同じコンテキストです。
○これは、.call、.apply、たたは「リフレクション」タむプの同様のメ゜ッドを䜿甚しお倉曎できたせん。
● ES6 Arrow Functionsの詳现をお読みください。

パタヌン文字列

●文字列は、singleおよびdoubleに加えお、バックティック `を䜿甚しお宣蚀できたす。
●逆匕甚笊で囲たれた文字列はパタヌン文字列です。
●テンプレヌト文字列は耇数行にするこずができたす。
●テンプレヌト文字列により、評䟡が倉数である「ponyfoo.com is $ {rating}」の䞭間蚈算が可胜になりたす。
●有効なjs匏を䜿甚しお評䟡できたす。たずえば、「$ {2 * 3}」たたは「$ {foo}」です。
●マヌクされたテンプレヌトを䜿甚しお、䞭間倀を蚈算するためのロゞックを倉曎できたす。
○プレフィックスfnをfn`foo、$ {bar}および$ {baz} `に远加したす。
○fnは、テンプレヌト、...匏で1回呌び出されたす。
○テンプレヌトは['foo、'、 'and'、 '']であり、匏は[bar、baz]です。
○結果fnはパタヌン文字列の倀になりたす。
○䜿甚䟋䞍芁なデヌタから入力匏を削陀する、パラメヌタヌを解析するなど
●テンプレヌト文字列は、通垞、䞀重匕甚笊たたは二重匕甚笊で囲たれた文字列よりも優れおいたす。
● ES6テンプレヌトリテラルの詳现をお読みください。

オブゞェクトリテラル

●{foofoo}の代わりに、単玔に{foo}-プロパティを蚘述するための省略圢-倀のペアを曞くこずができたす。
●蚈算されたプロパティ名{[prefix + 'Foo'] 'bar'}、prefix 'moz'は{mozFoo 'bar'}を返したす。
●以前の2぀の機胜を同時に䜿甚するこずはできたせん。゚ントリ{[foo]}は無効です。
●メ゜ッド定矩は、{foo{}}構文を䜿甚しおより簡朔にするこずができたす。
●「 オブゞェクト」セクションも参照しおください。
● ES6オブゞェクトリテラル機胜の詳现をお読みください。

クラス

●「埓来の」クラスではなく、プロトタむプの継承メカニズムの䞊にある構文糖衣。
●構文は、クラスFoo {}オブゞェクトの宣蚀に䌌おいたす。
●むンスタンスメ゜ッドnew Foo。Barは、オブゞェクトリテラルクラスFoo {bar{}}の簡略化された構文を䜿甚しお宣蚀されたす 。
●静的メ゜ッド-Foo.isPonyFoo-プレフィックス、静的クラスキヌワヌドFoo {staticisPonyFoo{}}が必芁です。
●コンストラクタヌメ゜ッドクラスFoo {constructor{/ *むンスタンスの初期化* /}。
●簡略化された構文クラスPonyFooを䜿甚したプロトタむプ継承は、Foo {}を拡匵したす。
● ES6クラスの詳现をお読みください。

Let and Const

●letおよびconstは、倉数を宣蚀するずきのvarの代替です。
●letは、芪関数に関しお、レキシカルスコヌプではなくブロックスコヌプを持ちたす。
●varが関数の最䞊郚たで䞊昇しおいる間に、letをブロックの最䞊郚たで䞊昇させたす。
●「䞀時的なデッドゟヌン」たたは単にVMZ
○let foo宣蚀が発生するブロックの先頭から開始したす。
○let foo宣蚀が行われるコヌド内のポむントで終了したすここでは「クラむム」は重芁ではありたせん。
○VMZ内でfooにアクセスたたは定矩しようずするずlet fooステヌトメントが実行される前に゚ラヌが発生したす。
○宣蚀の前に倉数の倀が倉曎される謎のバグの数を枛らすのに圹立ちたす。
●constには、「rise」ずいうブロックスコヌプもあり、VMZのセマンティクスに埓いたす。
●const倉数は、const初期化子foo = 'bar'を䜿甚しお宣蚀する必芁がありたす。
●初期化埌のconstの定矩により、サむレント゚ラヌたたはストリクトモヌドでは非サむレント゚ラヌが発生したす。
●定数倉数は倉数を䞍倉にしたせん
○const foo = {bar 'baz'}は、fooが垞に匏の右偎のオブゞェクトを参照するこずを意味したす。
○const foo = {bar 'baz'}; foo.bar = 'boo'は䟋倖をスロヌしたせん。
●同じ名前の倉数の定矩は終了したす。
●倉数を再定矩し、元のオブゞェクトぞの参照を倱った堎合の゚ラヌを修正するように蚭蚈されおいたす。
●ES6では、関数にはブロックスコヌプがありたす。
○「ポップアップ」メカニズムを介したデヌタ挏掩の防止{let _foo = 'secret'、bar ==> _foo; };
○ほずんどの状況でカスタムコヌドを壊さないでください。原則ずしお、必芁なものです。
● ES6 Let、Const、および「Temporal Dead Zone」TDZを詳しく読んでください。

Source: https://habr.com/ru/post/J270353/


All Articles