結合工做中使用狀況,簡單對es6進行一些複習總結,包括經常使用的語法,api等,以及短期內要上手須要重點學習的知識點(不一樣工做環境可能有一些差異),主要參考連接是阮一峯的博客以及外文博客(阮老師大部分文章是直接翻譯的這個博客) 2ality.com/p/about.htm…html
先說一下ECMAScript,ECMA是一個標準化組織,他們制定了JavaScript的語言標準,因此以後一直稱爲ECMAScript,普遍的講,Javascript是其一種標準實現,包括ECMAScript,dom,bom等es6
ECMA組織每一年都會有新標準發佈,標準名爲ES+年份,因此咱們會聽到ES2015,ES2016,ES2017等,ES6其實就是ES2015,表示在15年發佈的最新版本,相應的ES2016,ES2017分別稱爲ES7和ES8,依次日後對應。編程
如今大部分博客,文章,分享中提到的ES6其實也能夠理解爲ES6+,只不過由於2015年以前,ECMAScript有不少年沒有發版(也有歷史緣由:ES4的夭折),積累了大量的新語法,api,因此在2015年一次性加在了ES6版本中發佈,以後每一年都只有不多的一些新增,好比:api
關於語法提案的流程,簡單瞭解一下:一個新的語法從提案到成爲標準須要通過五個階段,每一個階段都須要標準委員會TC39定時開會進行批准數組
流程見連接:exploringjs.com/es2016-es20…瀏覽器
須要注意的一點,全部的標準都是基於實現的,幾大廠商瀏覽器對提案的實現必須先於標準纔會進入定稿階段,包括Babelbash
咱們經常使用的async和await,就是由於16年開會的時候沒有達到可定案的標準,而沒有進入ES2016標準,最後添加在2017標準中數據結構
可參考該連接,有每一年發佈標準中新增的特性:2ality.com/2017/02/ecm…app
下面主要就是結合平時工做,簡單介紹最經常使用的語法,類方法以及實例方法等,下面主要是一些列舉,大部分知識點想深刻學習的話,仍是獲得阮老師博客或者外文博客上學習dom
不過我標註了實際工程中的使用頻率,能夠參考,針對性的學習,快速上手
提示:實際開發中結合eslint能夠幫助本身寫出更規範的代碼
使用頻率極高(爲方便一塊兒介紹,會將一些不經常使用的語法也列出來,標題括號中也爲大量使用):
這是最基礎的兩個命令,都是聲明變量,要強制全部的聲明都使用他們兩個
與var的區別:
const與let區別:
咱們能夠直接在經過 param = 1 的形式設置默認值 包括爲函數參數設置,爲解構設置(見下面介紹) 避免了之前的這種寫法:
function test(data) {
data = data || {};
...
}
// 能夠直接寫爲
function test(data = {}) {
...
}
複製代碼
須要注意的是:默認值生效的條件是,嚴格等於 undefined,若是值爲null,不會使用默認值
解構賦值其實就是爲了更方便的從數組或者對象中經過屬性名取數據,熟練使用以後,配合默認值,rest操做符能夠很大程度提升效率,簡化代碼
下面是一些簡單的使用對比
var a = 1, b = 2, c = 3;
// 或者
var param = { a: 1, b: 2, c: 3 };
var a = param.a || 1; // 默認值
var b = param.b;
var c = param.c;
// 或者
function add(param) {
param = param || {};
var v1 = param.v1 || 0;
var v2 = param.v2 || 0;
return v1 + v2;
}
複製代碼
能夠看出來,若是參數比較多的話,代碼很臃腫 若是用解構賦值,咱們能夠寫成這樣,很簡潔
let [a, b, c] = [1, 2, 3]
// 或者
let {a = 1, b, c} = {a: 1, b: 2, c: 3}
// 或者
function add({v1 = 0, v2 = 0} = {}){
return v1 + v2;
}
複製代碼
類比上面代碼,其中 {v1 = 0, v2 = 0} 這個對象接收param參數,若是param未傳入,設置默認值爲{},進而,v1,v2從param或者默認值{}中取值,取不到的話也設置默認值
解構的核心是,=號左邊經過屬性名直接獲取=號右邊對象相應的屬性
而且全部類型的數據均可以被解構,即出如今=號右邊,只不過字符串,數字,布爾值出如今等號右邊時會先轉化爲對象 使用解構能夠大大改善代碼的可讀性,減小的冗餘的代碼,更靈活簡潔的獲取屬性,設置默認值,尤爲是配合rest操做符時。
使用在函數參數中(取代arguments)或者解構賦值時,方便咱們批量的獲取設置數據,大量用在數組和對象中,見下面 數組部分
該語法在ES2018中成爲規範,可是工做中早已大量使用,參考博客 2ality.com/2016/10/res…
注意:...只能出現一次而且必須出如今結尾
下面是錯誤的用法:
const {...rest, foo} = obj; // SyntaxError
const {foo, ...rest1, ...rest2} = obj; // SyntaxError
複製代碼
ES6對函數進行了不少擴展,其中最經常使用的是箭頭函數以及rest參數和默認值,rest參數與默認值都與解構關係密切
這個使用頻率極高,大大簡潔了代碼,尤爲做爲回調傳入的時候 與es5函數區別:
經常使用的主要是如下幾點 最經常使用的是支持模板寫法,使用反引號``和${} 取代字符串拼接
// 好比:
const a = ‘222’, b = ‘333’;
const c = a + ‘444’ + b;
const c = `${a}444${b}`
複製代碼
剩下的選擇性瞭解:
主要是增長如下經常使用點
let a = [1, 2, 3], b = [2, 3, 4];
let merge = […a, …b] // [1, 2, 3, 2, 3, 4]
// 替換apply
function func (a, b, c) {…}
// 若是須要傳入一個數組,es5就要這樣寫
func.apply(null, [1, 2, 3])
// es6
func(…[1, 2, 3])
// 反轉字符串的實現
[…str].reverse().join(‘') // 類數組對象 { ‘0’: ’12’, ‘1’: ‘123’, length: ‘2'
}
複製代碼
下面的選擇性學習:
簡化對象寫法,新增一些Object類方法,使用頻率極高
主要更新
下面的選擇性學習:
對上面使用頻率高的知識點進行了解學習之後即可以進行基本開發了,熟練使用後天然會體會到es6的美 可是實際工做中,不可能都是這些基礎語法,api,須要用到更多的高級知識點
目前咱們在大量使用的有: 這兒作簡單介紹,工做之餘能夠本身去深刻,其中Class好理解,Module和Decorate相對也好上手 主要是Promise與Async,簡單瞭解以後也能夠快速寫代碼,可是當應用複雜時,仍是須要你深刻了解其工做原理
推薦首學Promise,Decorator可在用到時再學
這是重中之重,ES6提出的異步的一種解決方案,要深刻學習
也是異步的解決方案,代替Generator,更友好,語義化的使用
ES6提供的語法糖,內部使用prototype實現,以面向對象的方式實現JS
裝飾器,能夠對類或者類方法進行裝飾,增長一些額外的行爲
模塊化的實現,幫助咱們拆分組合代碼,模塊化開發 此處還有兩個概念,CommonJS和AMD模塊
除了前面介紹的,剩下就是一些工做中用到比較少的特性,包括一些你經常使用可是並不知道的底層技術,好比Iterator,當你使用 … 或者for of時都會用到該知識點,建議學習
新增的數據結構,與Java中相似,目前來看,習慣未養成,使用比較少,可是建議學習
工做中會經常使用的正則語法即可以了,推薦一個連接,幫助你更好的學習使用正則:regexper.com/#%2Fabc[^qw… 有時候能夠用先行斷言和後行斷言實現一些複雜的判斷
es6新增的原始數據類型,表示獨一無二的值,通常使用爲直接Symbol(str),Symbol.for(str),Symbol.keyFor(str)
如今有string boolean,number,undefined,null,symbol六種,JS語言內部大量使用,工做中偶爾會用,好比定義私有屬性的時候
const FETCH = Symbol('fetch');
import fetch from './lib/fetch';
module.exports = {
get fetch() {
if (!this[FETCH]) {
this[FETCH] = fetch;
}
return this[FETCH;
},
}
複製代碼
Proxy即在目標對象外設置一層代理,外界真正訪問到該對象時必須先訪問代理 Reflect相似Proxy,是ES6爲了操做對象而新增的Api,將一些Object上的對象放在了Reflect對象上,並修改了一些行爲
這部分主要是新增方法,使用頻率整體不高