初日にES6の研究ノート

## 3、CONST、としましょう

** 3.1のconst **

一度、一度定義与えられた後のconstは定数を定義するのに使用される、いわゆる一定の値が変更されていない生涯量
のconst A = 10; = 20 ;
、一定である上に再割り当てする場合は、必要になりますノートでは、エラーが見つかりました:
constが一般的に二つのことを定義:
L-定義関数
lはいくつかの特別な文字列定数を定義し、
定数名は、常にアンダースコアで区切って、複数の単語であれば、すべて大文字で、これは一定であることを示唆しています

* LET ** 3.2 *
ブロックレベルの範囲に限り、「{}」パッケージとして、ブロックレベルの範囲を定義するために使用されるLET変数。
*注:ないJSON、ブロックのために、()を循環させるためのブロックである一方で、身体機能をボディを見ている場合
注:私たちは、通常で聞かせてのために使用し、この時間の自動ループ閉鎖*:

VaRのARR = [];
{(; iが10 <I ++は、I = 0せて)ため
arr.push(関数(){
にconsole.log(I);
});
}
)([4] ARR。// 4

ましょうと完璧にマッチされ、通常は無益てみましょう。
VAR変数宣言は、私は時間を変数に最終値、ARR [4](ただし、アクセスクロージャが、同じI、Iように単一の値)が得られ、ループのために外部からアクセスすることができます。
そして、それぞれがIに対応したさまざまなを持ってみましょう新しいと私が、私はインクリメントであるか、値をデクリメントアクセス時間があります。

要約**:
** LのCONSTは、通常、定義された定数、関数および定数を定義するために使用される
}の変数Lは{せは、典型的にするためのループを定義するために使用される、ブロックレベルの変数のスコープを定義するために使用される
一定のブロックレベルのスコープが好きです聞かせて使用し、文の定義された変数、定数の値は変更し再割り当てすることはできません、と再文にすることはできません。****

## **第四に、解体変数代入**

4.1 **解体アレイ
アレイは、等号の右側が配列である場合、変数[]受信され、受信された対応関係にロードされてもよい左側に等しい、解体することができます。

VAR [A、B、C] = [1,2,3]。
console.log(A)。// 1
にconsole.log(B)。// 2
にconsole.log(C); // 3

上記のコードを示し、対応する位置に、変数はアレイから抽出された値が割り当てられることができます。
本質的には、「パターンマッチング」限り、等号の両側に同じパターンで、このようなアプローチは、左の変数は、対応する値が与えられます。

配列が複雑であれば、この時間は、構造体の左側にこれらの変数は、また同じ構造を持っています:

VAR [A、B、[C、D] = [1,2、[3,4]。
console.log(A)。// 1
にconsole.log(B)。// 2
にconsole.log(C); // 3
にconsole.log(D)。// 4

構造が異なる場合は?

VAR [A、B、C] = [1,2、[3,4]。
console.log(A)。// 1
にconsole.log(B)。// 2
にconsole.log(C); // [3,4]

別の不完全な解体、モード、右側の配列の唯一のマッチング部分の左側に、すなわち等号であり、この解体はまだ成功することができます。

VAR [A、[B]、D] = [1、[2 ,. 3] ,. 4];
にconsole.log(A); // 1
にconsole.log(B); // 2
にconsole.log(D)。 4 //
成功解体した場合、変数の値は未定義に等しく、

4.2 **解体オブジェクト
のオブジェクトが異なる構造と点の配列を有する、配列の要素は、アレイは、彼の位置の値によって決定され、順に配置されています。
プロパティ(キーは)何のためにオブジェクトませんが、正しい値を得るために、同じ名前の変数を表示しなければなりません。

VAR {名前、ID、性別} = { "ID":1001と、 "名前": "张三"、 "性別": "男"}。
console.log(ID)。// 1001年
にconsole.log(名); //张三
にconsole.log(性別)。//男

変数と同じ名前の属性が矛盾しているの右側のオーダーの左オペランドが、の値に全く影響を受け3の上記の順序の例
と同じname属性に対応する変数がない場合は、値をもたらすことができない、それは未定義です。
変数と属性名が矛盾している場合は、次のように、我々は書かれている必要があります。

FOO {VAR:バズ} = {FOO: 'AAA' ,,バー: 'BBB'}
にconsole.log(バズ)。// AAA


VAR {最初の:F、最後:L} = {最初:最後、 'こんにちは': '世界'}
にconsole.log(F)。//ハロー
にconsole.log(L)//世界

これは実際に記載されて解体割当目的は、上記の短縮形であり、
上記のコード、FOOは、マッチングパターンである、バズは、変数は、実際のバズではなく、パターンFOOを割り当てられ、可変です。
旧後者とではなかった解体オブジェクトの内部機構は、同じ名前のプロパティを見つけることである、と言うことです、その後、実際の割り当てに対応する変数に代入。

** 4.3 **デフォルト
構造の割り当てを使用すると、デフォルト値を指定することができます

VAR [A = 1] = []
VAR [B = 1] = [88]
にconsole.log(A); // 1
にconsole.log(B); // 88
VAR [C = 1] = [不定]
VAR [D = 1] = NULL]
はconsole.log(C); // 1
にconsole.log(D); // NULL

したがってアレイの厳密に同じ部材は未定義の場合にのみ、デフォルト値が有効になり音符、ES6内部使用の厳密な等価演算子(===)、位置の値があるかどうかを決定するために、
配列値がnullの場合、デフォルト値が有効になりませんnullは未定義厳密に等しくないので。

** 4.4拡張オペレータ(スプレッド演算子)**
拡張演算子(スプレッド)は、3つのドット(...)です。コンマで区切られたパラメータのシーケンスに配列だけでなく、通常割当対象、柔軟広いため、オブジェクトを展開するように強制。

Lの第1の効果:「演算子を展開」と呼ばれ、文字が拡大することが何であるか、演技するための手段、およびオブジェクトの配列で使用することができます。

VAR OBJ1 = {
"A" 100、
"B" 200、
"C" 300、
}
VAR OBJ2 = {
... OBJ1、
"D":888
}
にconsole.log(OBJ1)
はconsole.log(OBJ2)
console.log(OBJ1 === OBJ2)。


アレイはまた、展開強制することができ、割り当ては、通常、1つのアレイに、このような二つの配列のような配列です。

残り4.5 **演算子(演算子REST)**
L秒、3つの役割:「残留演算子」と呼ばれるが、アレイ内の残りのパラメータを意味し、それに割り当てられ、解体です。配列やオブジェクトのための一般的な。

VAR [A、B、... C] = [1,2,3,4,5,6]。
console.log(A); // 1
にconsole.log(B); // 2
にconsole.log(C); // [3,4,5,6]

「...」最後のパラメータは、この例のみによって発生する可能性があることに注意してくださいと...散乱値を配列に入学することができました。
論理的には、「...」それが演算子です。「...」あなたは価値の飛散配列に別れることができます。

L補助知識ポイントは、キーと値ES6一貫した値にオブジェクトを省略することができる場合。

** 2リットルのシナリオ:**
大きい確率関数を受信した後、JSON、解体及び文法が仮パラメータとES6を書き込むためのパラメータです。
V、vは省略されている:通話機能は、通常のkパラメータを渡します

VAR名= "ボブ";
VAR高さ= 170;
VAR重量= 100;

機能MM({高さ、名前、体重}){
にconsole.log( "名前は" +名)
はconsole.log( "高"高さ+)
はconsole.log(「量が」+重量)
}。

// MM({名:名、 "高さ":高さ、 "体重":重量})
MM({名前、身長、体重})

文の赤い部分は、JSONを作成することで、緑色の部分は構造を作っています。
あなたが関数のパラメータの順序を呼び出すと解体は、自動的にキーと一致しますので、動揺構造に影響を与えません。
()
** Lは、差分演算子と残りの操作オペレータ**展開し
、残りの演算子と演算子は逆に拡大し、ある程度、単に、残りのオペレータにデプロイ線形演算子の間の差を配列の複数の要素に「展開」されます展開オペレータは、オペレータは残りの要素、および単一の要素に「圧縮」の複数を収集します。

4.6 **解体翻訳オブジェクト
注:バベル意志「[]」と「{}」解体は、VARのものとなります。
しかし、バベル「オブジェクトの解体」、唯一の翻訳配列の解体を翻訳しません。
理由:ステージにおける物体静止広がるさらに段階(実験プロパティ)。
解決策:あなたが使用することができ、.babelrc設定ファイルを入れ、プラグインバベル変換休止-広がりをインストールします。

{
「プリセット」:「ES2015」、「es2016」]、
「プラグイン」:「オブジェクト・変換・拡散・RESTを」]
}
プリセットの.babelrcが予め設定された、プラグイン定義されたプラグを定義するために使用されます。
インストールが異なります。
CNPMインストール-プラグインバベル・変換・スプレッド・オブジェクトRESTを

**

##第五に、アレイ法

**
4新しい"キングコング"機能の配列でES6:forEachの()、マップ() 、フィルタ()、軽減()、 いくつかの構文糖です。forEachの()構文はES5ある
** 5.1のforEach()反復**
のforEach()メソッドは、メソッドコールバック関数は、三つのパラメータ受信アレイをループに使用される
2、配列の内容のが(アイテム)を横断します配列インデックス(指標)がアレイ自体に対応される第三の(配列)です。

VAR ARR = [ "ホワイトボード"、 "ユニタリチキン"、 "赤"、 "リッチ"、 "三個のケーキ"];
arr.forEach(関数(項目、インデックス、アレイ){
にconsole.log(商品、指数、配列)
});
注:forEachの()が戻り値を返しません。

** 5.2マップ()マップ**
アクションマップ方式は理解しやすい、「マッピング」は、元の配列に対応する新たな配列に「マッピング」されます。

ARR = VAR [10,20,30,40,50,99];
VAR = newArr arr.map(関数(項目、インデックス、アレイ){
戻り*項目2; //変数受信に新しい結果を返し、不変源アレイ
})。

map関数の性質は、文の関数は新しい配列を返します生き残るそれぞれのオリジナルの配列、のそれぞれを横断する、です。
注:
L関数の戻り値が必要とされていない場合は、すべての配列は未定義にマップされます。
Lマップアレイと、元の配列のような特定の長さのリターン。
L
実用においては、配列内のオブジェクトへのアクセスを容易にするためにマップ()を利用することができる特定の属性値を持つ
** 5.3フィルタ()**濾過
フィルタを「フィルタ、フィルタ、」意味は、元のアイテムの特定のポストフィルタ・アレイを指し、新しい配列をフィルタリング返された後、使用量と同様のマップ。
たとえば、元の配列から、すべてのも、新しい配列を返し選びたいです。

VaRのARR = [312,55,77,11,13,15,18,26,30,40,50,99]。
VAR newArr = arr.filter(関数(項目、インデックス、アレイ){
戻り項目%2 == 0;
});
console.log(ARR)
はconsole.log(newArr)

説明:順番に各項目に機能を実行するには、フィルタ、コールバック関数のARRますtrueまたはfalseのブール値を返す必要があります。真の値は、新しい配列に格納されます偽無慈悲...あなたを放棄
同じポイントリットルフィルターとマップ:各1が反復されます
リットルフィルターを、別のポイントをマップ:マップは少なくない項目の配列を返し、フィルタエントリが少なくてもよいです。

** 5.4()反復を減らす**

arr.reduce(コールバック【、はinitialValue])
コールバック関数のコールバックパラメータは、4つのパラメータ、第二のセット(オプション)の初期値を有します。
:コールバック関数は、4つのパラメータを有する
前:前回重畳または初期値の結果
電流:現在のアイテムが重畳関与する
現在のインデックス値:インデックス
配列:元の配列自体


の古典的な面接の最大[]配列を求めて:
VaRのARRを= [43,5,4,6,4567,78,8,69,568];
//最大VAR = Math.max.apply(ヌル、ARR);
//はconsole.log(MAX)

VaRのarr.reduce = MAX(機能(PREV、CUR){
はconsole.log(PREV)// 43,43,43,43,4567,4567,4567 ...
PREV> CUR前返す?:CUR;
});
はconsole.log(max)を、 // 4567

機構を削減:項目1のインデックスをトラバース、それぞれの値は、戻り値前次トラバーサル、トラバーサルCURこのとき、蓄積された前の一種感として使用されます。
初期パラメータ(カスタム)を設定することができる減らす、2番目のパラメータは減らす場合、最初のトラバースは、0から横断この時間を減少させる、1つのアイテムが代わりに開始されます。

** 5.5 Arrayには使用しています- **純粋な関数を書く
「機能」プログラミングを行うために特に有用削減、フィルタ、上記の4つの「キングコング」のマップ。
純粋な機能は何ですか?
機能の範囲外で変化しない状態変数に依存しない純粋な関数をいいます。
lはこの関数は、渡された内部パラメータを変更しません。
Lこの関数は、パラメータに合格している必要があり、決意は値を返します。
関数内リットルの文は、ランダムに存在しないが、そのようMath.random()、新しいDate()と 、 ;同じパラメータを渡し、戻り値は同じでなければなりません
ように$に.get(などの任意の非同期のステートメントを持つことができないリットルの機能を、 )、fs.readFile()、のsetInterval( )

** L [実施例1])(のaddItemに純粋な関数を作成してください、ARRを受信し、N個のパラメータとしては、テールARR nを増加させることができます。**

ARR = VAR [99,77,66];
(ARR、N-){のaddItem機能
; [N-、... ARR]戻り
}
VAR = ARR2はのaddItem(ARR、88)であり; //新しい配列を返し
にconsole.logを( ARR); //元の配列そのまま
にconsole.log(ARR2)。


[実施例4] **、純粋関数changeItemを書き込むARRを受け付け、nは、パラメータとしてAください、ARR最初の添字nの値を変更するアイテムであることができます。**

VAR ARR = [ "ホワイトボード"、 "ユニタリチキン"、 "2"、 "3万"];
関数changeItem(ARR、N-、A)は{
==((項目、指数)=> N-指数arr.map戻り? :アイテム)
}
VAR = ARR2はchangeItem(ARR、2、 "9")である
にconsole.log(ARR)
はconsole.log(ARR2です)。


**条件リットルの純粋な機能:**
L関数は、結果はそのパラメータにのみ依存返し
、外部状態に依存しないリットル
副作用なしリットルの実装プロセス

機能の実行が副作用を持たないは何**?**
外部で生成された数の関数の実行中に、関数は副作用を持っていると言われています。

id属性を変更しますlはの名前を指定します

CONST changeName =関数(ARR、ID、名前){
arr.map返す(関数(アイテム){
IF(item.id == ID){
リターン{...項目名}
}
戻り項目;
});
}

 

VaRのjieguo = changeName(ARR、2 、 " ベティ")
はconsole.log(jieguo);

ジングル:マップまたはによって、フィルタ、変更マップを削除...

**概要
純粋な機能の痛みを構築するのはなぜ?非常に「トリッキー」純粋関数は、純粋な機能を実行するので、あなたはそれが外に影響を与えていない、それは予期しない動作を生成しません、それは悪いことを行います心配する必要はありません。どんなにいつ、どこで、あなたはそれが素直にそれに何かを与えるものを吐き出すん。アプリケーションほとんどの機能は、純粋な機能、そして、あなたのプログラムのテスト、デバッグで構成されている場合、それは非常に便利になります。
純粋な関数を使用してのL利点
最も重要な利点は、副作用はありません。純粋な関数がこれを行うには、スコープの外で状態を変更しない、コードがシンプルかつ十分に明確になる:あなたはそれの戻り値に注意を払う限り、純粋な関数を呼び出しますが、理由の問題を心配していない場合に他の場所でエラーになります。

純粋な機能は、システムに影響を与えない実行の順序を変更することが堅牢であるため、操作が並列的に純粋な関数で実行されてもよいです。
純粋な機能ユニットテストは、入力と出力を考慮する必要がある、文脈を考慮する必要がなく、簡単です。

関数は、入力数を受け入れることで、プロセス出力の一部を生成します。これらの入力パラメータが呼び出され、戻り値は出力と呼ばれます。
それによってのみ呼び出される関数パラメータ決意純粋の戻り値は、それが(例えば:いつ、どこで、それを呼び出す)システムの実行状態に依存しません。**

 

おすすめ

転載: www.cnblogs.com/wjs593/p/10993660.html