自分で使えるECMAScript 6の特性を集めます.

4814 ワード

 for...of VS for...in

for...of          ,   :

let nicknames = ['di', 'boo', 'punkeye'];
nicknames.size = 3;
for (let nickname of nicknames) {
 console.log(nickname);
}
Result: di, boo, punkeye

for...inlet nicknames = ['di', 'boo', 'punkeye'];
nicknames.size = 3;
for (let nickname in nicknames) {
 console.log(nickname);
}
Result: 0, 1, 2, size

WeakMap

WeakMap      Map,        key      ,     WeakMap             ,             。

          ,WeakMap     key      。       delete(key),has(key),get(key)   set(key, val):

let w = new WeakMap();
w.set('a', 'b'); 
// Uncaught TypeError: Invalid value used as weak map key

var o1 = {},
 o2 = function(){},
 o3 = window;

w.set(o1, 37);
w.set(o2, "azerty");
w.set(o3, undefined);

w.get(o3); // undefined, because that is the set value

w.has(o1); // true
w.delete(o1);
w.has(o1); // false

クラス
ES 6にはクラス文法があります.ここのクラスは新しい対象継承モデルではなく、プロトタイプチェーンのシンタックスキャンディー表現形式です.
関数でstaticキーワードを使って構造関数を定義する方法と属性:
class Task {
 constructor() {
 console.log("task instantiated!");
 }

 showId() {
 console.log(23);
 }

 static loadAll() {
 console.log("Loading all tasks..");
 }
}

console.log(typeof Task); // function
let task = new Task(); // "task instantiated!"
task.showId(); // 23
Task.loadAll(); // "Loading all tasks.."
これはc言語と同じです.クラスの継承とオーバーセット:
class Car {
 constructor() {
 console.log("Creating a new car");
 }
}

class Porsche extends Car {
 constructor() {
 super();
 console.log("Creating Porsche");
 }
}

let c = new Porsche();
// Creating a new car
// Creating Porsche
extensは、サブクラスの親クラスを継承することができます.サブクラスのconstructor関数ではsuper()関数を実行する必要があります.
もちろん、super.parent MethodName()のように、サブタイプの方法で父親タイプの方法を呼び出すこともできます.