1.Module
Module 是 ES6 的新特性,是語言層面對模塊化的支持。
注:與以前模塊加載機制不一樣,Module 是動態的加載,導入的是變量的
只讀引用 ,而不是拷貝
2.Symbol
特色:
symbol 是一個 「新」 的 基礎數據類型 ;從 ES6 起,JavaScript 的 基礎數據類型 變爲:
string, number, boolean, null, undefined, symbol
symbol 能夠用做 Object 的 key
symbol 存在全局做用域,利用 Symbol.for(key) 方法,能夠建立(全局做用域無指定鍵)或獲取全局做用域內的 symbol ;利用 Symbol.keyFor(sym) 方法,能夠獲取指定 symbol 的鍵
JavaScript 內部使用了不少內置 symbol ,做爲特殊的鍵,來實現一些內部功能;例如 Symbol.iterator 用於標示對象的迭代器
例子以下:
3.lterator和For..Of
遍歷器(Iterator)它是一種接口,爲各類不一樣的數據結構提供統一的訪問機制。任何數據結構只要部署Iterator接口,就能夠完成遍歷操做(即依次處理該數據結構的全部成員)。
Iterator的做用有三個:
一是爲各類數據結構,提供一個統一的、簡便的訪問接口;
二是使得數據結構的成員可以按某種次序排列;
三是ES6創造了一種新的遍歷命令for...of循環,Iterator接口主要供for...of消費。
請看例子:
String, Array, Map, Set等是原生可迭代對象,由於他們都在原型(prototype)對象中實現了 Symbol.iterator 鍵對應的方法
for…of 是對象迭代器的遍歷,而 for…in 是對象中 可枚舉 值的遍歷
4.Map和set
Object本質上是鍵值對的集合(Hash結構),可是傳統上只能用字符串看成鍵。
Map相似於對象,也是鍵值對的集合,可是「鍵」的範圍不限於字符串,各類類型的值(包括對象)均可以看成鍵。
Set它相似於數組,可是成員的值都是惟一的,沒有重複的值。
繼續看例子:
5.Proxy和Reflect
元編程
元編程是指的是開發人員對 「語言自己進行編程」。通常是編程語言暴露了一些 API,供開發人員來操做語言自己的某些特性。ES6 兩個新特性 Proxy 和 Reflect 是 JavaScript 關於對象元編程能力的擴展。
Proxy 能夠 「代理」 對象的原生行爲,替換爲執行自定義行爲。
Proxy 能夠理解成,在目標對象以前架設一層「攔截」,外界對該對象的訪問,都必須先經過這層攔截,所以提供了一種機制,能夠對外界的訪問進行過濾和改寫。Proxy 這個詞的原意是代理,用在這裏表示由它來「代理」某些操做,能夠譯爲「代理器」。繼續看例子:
注:Reflect對象的方法與Proxy對象的方法一一對應,只要是Proxy對象的方法,就能在Reflect對象上找到對應的方法。這就讓Proxy對象能夠方便地調用對應的Reflect方法,完成默認行爲,做爲修改行爲的基礎。也就是說,無論Proxy怎麼修改默認行爲,你總能夠在Reflect上獲取默認行爲。
6.Promise,Generator,Async-Await
異步編程
在 ES6 以前,JavaScript 的異步編程都跳不出回調函數這個方式。回調函數方式使用很是簡單,在簡單異步任務調用時候沒有任何問題,但若是出現複雜的異步任務場景時,就顯得力不從心了,最主要的問題就是
多層回調函數的嵌套會致使代碼的橫向發展,難以維護;ES6 帶來了兩個新特性來解決異步編程的難題。
6.1 Promise
Promise 是異步編程的一種解決方案,比傳統的解決方案——回調函數和事件——更合理和更強大。
Promise 是 ES6 的一個新特性,同爲異步編程方式,它主要有以下幾個特色:
1.本質仍是回調函數
2.區分紅功和失敗的回調,省去嵌套在內層的判斷邏輯
3.能夠很輕鬆的完成回調函數模式到 Promise 模式的轉化
4.代碼由回調函數嵌套的橫向擴展,變爲鏈式調用的縱向擴展,易於理解和維護
5.Promise 雖然優點頗多,可是代碼結構仍與同步代碼區別較大
看例子:
6.2 Generator
1.Generator 從語法上,首先能夠把它理解成,Generator 函數是一個狀態機,封裝了多個內部狀態。
2.執行 Generator 函數會返回一個遍歷器對象,也就是說,
Generator 函數除了狀態機,仍是一個遍歷器對象生成函數。返回的遍歷器對象,能夠依次遍歷 Generator 函數內部的每個狀態。
3.形式上,有兩個特徵。一是,function關鍵字與函數名之間有一個星號*;二是,函數體內部使用yield語句,定義不一樣的內部狀態(yield在英語裏的意思就是「產出」)。
特色:
1.能夠經過 yield 關鍵字,終止執行並返回(內到外)
2.能夠經過 next(val) 方法調用從新喚醒,繼續執行(外回內)
3.運行時(包括掛起態),共享局部變量
6.3 Async-Await
ES2017 標準引入了 async 函數,使得異步操做變得更加方便。
async 函數是什麼?
一句話,它就是 Generator 函數的語法糖。
我的認爲它將是 JavaScript 目前支持異步編程最好的方式
看看下面的例子:
Alone
2018-05-16