ES6
歴史
ECMAScriptとJavaScriptの関係は?
- Netscape '96 が ECMA Standard 1.0 を提出
- 従って、ECMA標準に続く既存のJS
ES6 ECMAScript2015との関係
- ECMAScript 6 は ECMA5.1 の次の標準として最初に提案されました。
- 実際のES6はいくつものバージョンが登場し、最終的に2015年のECMAScript 1025に落ち着きました。
- つまり、ES6は
ストリクトモード
モジュラー開発、自動厳格モード
"use strict"
-変数は使用する前に宣言する必要があります。
- 関数は引数と同じ名前の属性を持つことはできません!
- writeable:true/false 書き込み可能かどうか
- with文は使えません。
- 読み取り専用のプロパティに値を代入することはできません。
- 8進数には接頭辞0は使えません。
- ストリクトモードの8進数は使用できません。
- 削除できない属性を削除するとエラーが発生します。
- configurable:false
- プロパティを削除できるのはdelete global[prop]だけです。
- eval は外部スコープに変数を導入しません。
- evalと引数は再割り当てできません。
- 関数の引数の変更は自動的に反映されません。
- 引数は使えません。.callee
- 引数は使えません。.callee.caller
- トップレベルの thisは未定義を指すので、トップレベルのコードで thisを使うべきではありません。
- fn.callerとfn.argumentsを使って関数呼び出しのスタックを取得することはできません。
- 予約語の追加
letおよびconst
let
letで定義された変数は、現在のステートメント・ブロックにのみ属します。
varとletを混在させることができます。
変数のリフティングはありません。
一時的なデッドゾーン
- var tmp = 123; if { tmp = 'abc'; // ReferenceError let tmp; }
const
定数宣言
- 定数の値を変更することはできません。
- 定数は、値を代入せずに定義することはできません。
const obj は obj の参照アドレスが変わるのを防ぎます。
obj=nullは使えないので、ヒープに残り、破棄できないことに注意してください。
アロー関数
var f=v=>v
- var fと同等=function(v){ return v
関数内にステートメントが1つしかなく、そのステートメントがreturnで返される場合は、{}を省略して
アロー関数の引数が1つの場合、括弧は省略できます。
引数がない場合、または複数の引数がある場合、括弧は省略できません。
矢印関数は、主に thisの方向を
- 関数が矢印関数に変更されると、thisは現在の関数の外の thisを指すように変更されます。
- 誰がクリックしたかはe.currentTargetでわかります。
上:オブジェクトの様々な機能方法
- var obj={ a:function(){ // ES5 console.log("a") }, b(){ // ES6 console.log("b"); }, c:; } }
代入の分解
配列を分解して値を代入
- let a=1,b=2,c=3
- let [a,b,c]=[1,2,3]
- 配列パースで最も重要なのはビット単位のパースです。
オブジェクトの解析
- let {a,b}={a:5,b:6}
- let obj = { p: [ 'Hello', { y: 'World' } ] };
let { p: [x, { y }] } = obj;
- オブジェクトはプロパティ名で解決されます。
- 名前が重複している場合は、別の名前を作成します。
は英語の -ity、-ism、-ization に対応します。
- 関数は複数の解析された値を返します。
- パラメータに初期値を設定することも可能です。
- JSONデータの抽出
注意
- パラメータを分解して割り当てた後は、ビットを飛ばすことができ、順番に書く必要はありません。
- ロードされたオブジェクトからメソッドを分解し、グローバル関数を形成します。
- 分解された課題には括弧を使わないようにしてください。
文字列拡張メソッド
文字のユニコード表現
- "\u0061"
includes()
- 文字列中に文字が存在するかどうかの判定
startsWith()
- パラメータ文字列が元の文字列の先頭にあるかどうかを示します。
- 2つのパラメータを使用する場合、2番目のパラメータは位置を示し、最初の位置が特定の開始位置であるかどうかを決定します。
endsWith()
- パラメータ文字列が元の文字列の末尾にあるかどうかを示します。
- 2つの引数については、 startsWith() を参照してください。
repeat()
- 元の文字列が数回繰り返され、新しい文字列が返されることを示します。
padStart()
"F".padStat(2, "0")
- 長さの指定が不十分な場合は、補数の前に、例えば、ここでFの長さが1である場合、2ビットを構成する必要があるので、0を追加する前に
padEnd()
- "F".padEnd(2, "0")
テンプレート文字列
- let n=3; console.log("a "+n+"b") これは不便な書き方なので、次のように書いてください。
- let n=3; console.log(a${n}b) ここでの文字列は `` を使って内部で引用されていることに注意してください。
ラベルテンプレート
- alert // alert(123)
Symbol
唯一無二の存在
通常の変数のシンボル
このタイプは主に定数定義に使用されます。
- let a=Symbol("a"); let b=Symbol("a"); console.log(a===b);//false
オブジェクトのキーと値のペアのキーは、文字でも記号でもかまいません。
シンボルのキー名は上書きされません。
Setとマップ
Set
特性
- 非繰り返しリスト型
- 非繰り返しリスト型
- 秩序正しく、制御不能
- 順序付き、制御なし
- 重複要素はなく、トラバーサルは非常に高速ですが、キーと値のペアに比べると若干劣ります。
新しいセット
- let a=new Set()
- let a=new Set()
- 要素の追加
- 要素の削除
- 関数が
サイズ
size()
- 長さ、長さはありません
アレイの重複排除
Map
配列の重複除去
- let arr=[1,2,3,1,2,3,1,2,3]; let sets=new Set(arr); arr=Array.from(sets); console.log(arr);
set(キー,値)
- 要素の追加
set(key,value)
- 要素の追加
delete(名前”)
- キー名の削除
get(key)
- 要素の取得
キー()
- すべてのキーのリストを取得
サイズ
- マップのメンバー数の取得
size
- マップのメンバ数の取得
has(value)
- 関数が
(エルゴード的
オブジェクトの反復処理
- for(let obj of maps){ console.log(obj); }.
オブジェクトの反復処理
- for(let obj of maps){ console.log(obj); }
プロパティ名の反復処理
- for(let str of a2.keys()){ console.log(str); }
値の反復処理
- for(let value of a2.values()){ console.log(value); }
forEach
- for(let item of a2.entries()){ console.log(item); }
弱い型
- WeakSet WeakMap
- a2.forEach(=>{console.log(v,k,list)})
- WeakSet WeakMap
- WeakMap に格納されるキーはオブジェクトでなければなりません。
- 弱い参照関係 別のオブジェクトが削除されると、そのオブジェクトは解放されます。