ES6的發(fā)展歷史
1997年7月犁功,ECMAScript 1.0發(fā)布。
1998年6月婚夫,ECMAScript 2.0版發(fā)布浸卦。
1999年12月,ECMAScript 3.0版發(fā)布请敦,成為 J- avaScript 的通行標(biāo)準(zhǔn)镐躲,得到了廣泛支持。2007年10月侍筛,ECMAScript 4.0版草案發(fā)布,對(duì)3.0版做了大幅升級(jí)撒穷,預(yù)計(jì)次年8月發(fā)布正式版本匣椰。草案發(fā)布后,由于4.0版的目
標(biāo)過(guò)于激進(jìn)端礼,各方對(duì)于是否通過(guò)這個(gè)標(biāo)準(zhǔn)禽笑,發(fā)生了嚴(yán)重分歧。以 Yahoo蛤奥、Microsoft佳镜、Google 為首的大公司,反對(duì) JavaScript
的大幅升級(jí)凡桥,主張小幅改動(dòng)蟀伸;以 JavaScript 創(chuàng)造者布蘭登·艾奇為首的 Mozilla 公司,則堅(jiān)持當(dāng)前的草案。2008年7月啊掏,由于對(duì)于下一個(gè)版本應(yīng)該包括哪些功能蠢络,各方分歧太大,爭(zhēng)論過(guò)于激進(jìn)迟蜜,ECMA 開(kāi)會(huì)決定刹孔,
中止 ECMAScript 4.0 的開(kāi)發(fā)(即廢除了這個(gè)版本),將其中涉及現(xiàn)有功能改善的一小部分娜睛,發(fā)布為 ECMAScript 3.1髓霞,
而將其他激進(jìn)的設(shè)想擴(kuò)大范圍,放入以后的版本畦戒,由于會(huì)議的氣氛酸茴,該版本的項(xiàng)目代號(hào)起名為 Harmony(和諧)。
會(huì)后不久兢交,ECMAScript 3.1 就改名為 ECMAScript 5薪捍。2009年12月,ECMAScript 5.0版 正式發(fā)布配喳。Harmony 項(xiàng)目則一分為二酪穿,一些較為可行的設(shè)想定名為 JavaScript.next 繼續(xù)開(kāi)發(fā),
后來(lái)演變成 ECMAScript 6晴裹;一些不是很成熟的設(shè)想被济,則被視為 JavaScript.next.next,在更遠(yuǎn)的將來(lái)再考慮推出涧团。
TC39 的總體考慮是只磷,ECMAScript 5 與 ECMAScript 3 基本保持兼容,較大的語(yǔ)法修正和新功能加入泌绣,將由 JavaScript.next 完成钮追。
當(dāng)時(shí),JavaScript.next 指的是ECMAScript 6阿迈。第六版發(fā)布以后元媚,將指 ECMAScript 7。2011年6月苗沧,ECMAScript 5.1版發(fā)布刊棕,并且成為 ISO 國(guó)際標(biāo)準(zhǔn)(ISO/IEC 16262:2011)。
到了2012年底待逞,所有主要瀏覽器都支持 ECMAScript 5.1版的全部功能甥角。
2013年3月,ECMAScript 6 草案凍結(jié)识樱,不再添加新功能嗤无。新的功能設(shè)想將被放到 ECMAScript 7震束。
2013年12月,ECMAScript 6 草案發(fā)布翁巍。然后是12個(gè)月的討論期驴一,聽(tīng)取各方反饋。
2015年6月灶壶,ECMAScript 6 正式發(fā)布肝断,并且更名為“ECMAScript 2015”。這是因?yàn)?TC39 委員會(huì)計(jì)劃驰凛,
以后每年發(fā)布一個(gè) ECMAScript 的版本胸懈,下一個(gè)版本在2016年發(fā)布,稱(chēng)為“ECMAScript 2016”恰响,2017年發(fā)布“ECMAScript 2017”趣钱,以此類(lèi)推。
ECMAScript與JavaScript的關(guān)系
ECMAScript是JavaScript的標(biāo)準(zhǔn)胚宦,而JavaScript是ECMAScript標(biāo)準(zhǔn)的一種實(shí)現(xiàn)
JavaScript組成:ECMAScript(核心)首有、DOM(文檔對(duì)象模型)、BOM(瀏覽器對(duì)象模型)
ECMAScript規(guī)定了Js的如下內(nèi)容:
1.語(yǔ)法
2.類(lèi)型
3.語(yǔ)句
4.關(guān)鍵字
5.保留字
6.操作符
7.對(duì)象
ES6特性
Js的基礎(chǔ):https://wangdoc.com/javascript/
Es6入門(mén):https://es6.ruanyifeng.com
瀏覽器對(duì)ES6的支持:http://ruanyf.github.io/es-checker/index.cn.html
1.變量定義(let和const)
1).let定義的變量只在它聲明的作用域內(nèi)有效枢劝,出了作用域無(wú)法訪(fǎng)問(wèn)
2).const保證了變量的地址空間存儲(chǔ)的數(shù)據(jù)不得改動(dòng)
變量的解構(gòu)賦值
解構(gòu)賦值:
ES6允許我們通過(guò)模式匹配的方式從已有的數(shù)組井联、對(duì)象中提取值并賦值給變量
3.類(lèi)型擴(kuò)展
字符串?dāng)U展:
數(shù)值擴(kuò)展:
函數(shù)擴(kuò)展:
數(shù)組擴(kuò)展:
對(duì)象擴(kuò)展:
4.類(lèi)型新增
ES6增加了Set 和 Map 2個(gè)類(lèi)型。
Set是集合您旁,類(lèi)似數(shù)組但是里面的元素是不可以重復(fù)的
Map是鍵值對(duì)烙常,以前想使用鍵值對(duì)只能通過(guò)對(duì)象類(lèi)處理,
現(xiàn)在直接有一個(gè)類(lèi)型可用鹤盒。
5.元編程
類(lèi)似在.NET中我們可以針對(duì)IL進(jìn)行編程操作蚕脏,通過(guò)編織動(dòng)態(tài)代理對(duì)象來(lái)進(jìn)行AOP一樣。ES6提供了Proxy類(lèi)型侦锯,它可以幫助我們做AOP驼鞭。當(dāng)需要針對(duì)對(duì)象進(jìn)行初始化以及
針對(duì)對(duì)象屬性進(jìn)行獲取、調(diào)整率触、刪除的時(shí)候我們都可以進(jìn)行攔截终议,它為我們提供了13種攔截操作。
Reflect對(duì)象和Proxy對(duì)象一樣葱蝗,也是ES6提供的操作對(duì)象的新API。Reflect對(duì)象上面的方法和Proxy對(duì)象的方法一一對(duì)應(yīng)细燎。
1).把原先不合理的API設(shè)計(jì)往Reflect對(duì)象上面遷移两曼,比如Object.defineProperty
2).把js中一些命令式的語(yǔ)法變?yōu)楹瘮?shù)行為,比如delete a.name
3).配合Proxy執(zhí)行對(duì)象的默認(rèn)行為
6.異步編程
ES6提供了Promise對(duì)象玻驻,這是一種異步編程的解決方案悼凑。
Promise充當(dāng)異步操作和回調(diào)函數(shù)之間的媒介偿枕。用法上和jQuery的deferred對(duì)象很像
使用promise優(yōu)化解決AJAX回調(diào)地獄問(wèn)題,并且有鏈?zhǔn)綄?xiě)法
async關(guān)鍵字
7.Generator函數(shù)
Generator 函數(shù)是 ES6 提供的一種異步編程解決方案户辫〗タ洌看下面案例:
Generator函數(shù)與普通函數(shù)相比在function關(guān)鍵字后面
加了,ES6沒(méi)有規(guī)定號(hào)的具體位置渔欢,但是建議緊跟
Function關(guān)鍵字后面墓塌。此外Generator函數(shù)會(huì)與yield關(guān)鍵字組合使用,看到y(tǒng)ield我們應(yīng)該能想到狀態(tài)機(jī)奥额。
1).代碼遇到y(tǒng)ield表達(dá)式苫幢,暫停執(zhí)行后面的操作
2).代碼調(diào)用next方法才會(huì)獲取到返回值,然后代碼繼續(xù)往下執(zhí)行直到遇到下一個(gè)next
3).遇到下一個(gè)return就結(jié)束垫挨,如果沒(méi)有return就返回undefined
8.類(lèi)
ES6增加了類(lèi)的功能以及類(lèi)的繼承功能:
9.模塊化
ES6增加了模塊(module)體系韩肝,它可以將一個(gè)大程序拆分成互相依賴(lài)的小文件,就像積木一樣九榔,在通過(guò)組合的方式組裝起來(lái)哀峻。ES6 的模塊系統(tǒng)主要由2個(gè)命令構(gòu)建 export 和 import。export 用于輸出模塊對(duì)外接口哲泊,而import用于輸入模塊提供的功能