ECMAScript 和 JavaScript 的關系是,前者是后者的規(guī)格,后者是前者的一種實現。
1、Symbol
新增的第六種原始數據類型;表示獨一無二的值;解決對象屬性名同名沖突。
前五種原始數據類型分別是:undefined、null、string、number、boolean
還有一個object對象類型
Symbol('a') == Symbol('a') // false
Symbol.for('a') == Symbol.for('a') // true
應用:
1、給對象添加獨一無二的屬性;
2、消除魔術字符串
switch (shape ) {
case 'Triangle': // 魔術字符串
break;
/* ... more code ... */
}
可以定義:
const shapeType = {
triangle: Symbol()
};
case shapeType.triangle: // 使用symbol屬性名代替字符串字面值,提高代碼可讀性和可維護性
Symbol.iterator
對象默認沒有遍歷器,不可遍歷。可以添加Symbol.iterator使其可遍歷
對象的Symbol.iterator屬性,指向該對象的默認遍歷器方法。
let obj = {x:1,y:2,z:3}
obj[Symbol.iterator] = function *() {
for (const key of Object.keys(obj)) {
yield obj[key]
}
}
[...obj] // [1, 2, 3]
2、Generator--異步編程解決方案
異步任務封裝
var fetch = require('node-fetch');
function* gen(){
var url = 'https://api.github.com/users/github';
var result = yield fetch(url);
console.log(result.bio);}
3、Proxy攔截器
在目標對象之前架設一層“攔截”,外界對該對象的訪問,都必須先通過這層攔截
var proxy = new Proxy(target, handler);
target參數表示所要攔截的目標對象,handler參數也是一個對象,用來定制攔截行為。
常用攔截:get、set、apply(攔截函數的調用)、constructor(攔截new 構造函數)
4、新增函數方法
Array.from()
只要是部署了Iterator接口的數據結構,Array.from都能將其轉為數組。
代替了Array.prototype.slice.call / [].slice.call
Array.protptype.includes() 方法用來判斷一個數組是否包含一個指定的值,如果是返回 true,否則false。