在 JavaScript ES6 標準規範中,其實還有很多的新擴展、新語法、新 API 都很有特色,只是這些就比較不常用了,大部分的功能也都能使用舊方法去實現,至少這些新事物能幫助簡化程序就是一大進步了。
本篇將會簡單地介紹 ES6 其他較實用常見的 API 與擴展,主要知道基本內容就好,並不會深入探討。
JavaScript ES6 其他常見的新 API
Promise 物件
- Promise 是一種非同步 (asynchronous) 處理的解決方案
- 特別參考
- 實用範例參考
Set 物件
- 這是新的資料結構物件,Set 類似於陣列,但內容成員不會有重複的值
- 放入有重複的值將會被覆蓋,內容成員總數不變
- 與 Map 物件一樣都有類似的操作方法與迭代方法
1 2 3 4 5 6 7 8 9 10
| let set = new Set();
set.add(10); set.add(10); set.add('text'); set.add({sayHi: 'Hi'});
console.log(map);
|
Proxy 物件
- 概念為重新定義 JavaScript 中某些操作的原始行為,攔截那些操作方法去改變它
- 應用範例 :
- 利用 Proxy 可以讓 “讀取 Object 的屬性值“ 轉變為 “執行某個函數“,從而實現屬性的方法操作,不需要建立函數
- 利用 Proxy 可以讓 “設定 Object 的屬性值“ 作為 “數據綁定“,發生變化時就會自動更新 DOM 與瀏覽器上的渲染
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| var proxy = new Proxy(target, handler);
var proxy = new Proxy({}, { get: function(target, propKey, receiver) { return 'getting'; }, set: function(target, propKey, value, receiver) { console.log('setting'); } });
console.log(proxy.test); console.log(proxy.other);
proxy.abc = 10; proxy[10] = 'test';
|
Reflect 物件
- 概念也是攔截 JavaScript 中某些操作方法去改變它
- Reflect 可以在 Proxy 的內部方法調用,確保該操作方法會執行原始的行為,然後再執行 Proxy 內定義的額外的功能
- 另外 Reflect 物件的其他用途
- 可以用來取代 Object 原型中部分的操作方法,改善了一些物件原始結構的問題
Generator 生成器函數
- 它有點類似一般的函數,使用關鍵詞
function*
- Generator 的運作概念就像是一個狀態機 (state machine),會一直改變內部的不同狀態
- 取得的 Generator 物件,起始狀態會先暫停什麼都不做,而每次執行
next()
方法,就會繼續執行函數,直到遇到下一個 yield 關鍵字,又會暫停函數的執行,而每一次暫停時會 yiled (產出)一個當前狀態值
- yiled 會返回一個
{value: anyType, done: boolean}
結構的物件
- Generator 產生的物件也有 Iterator 的性質,所以可以用
for...of
迭代迴圈去取得 yield 返回的 value 值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| function* gen() { yield 1; yield 2; }
var g = gen();
g.next();
g.next();
g.next();
|
JavaScript ES6 其他較實用的擴展
- 字串 (Sting) 可使用 Unicode 表示法
1 2
| console.log("\u{41}\u{42}\u{43}");
|
- 數值 (Number) 可以使用二進制和八進製表示法
- 數值 (Number) 可以使用
**
關鍵字當作指數運算
1 2 3 4 5 6
| console.log(0b1100011); console.log(0o143);
console.log(2**6);
|
JavaScript ES6 其他新功能 - 參考網址