ES6(ECMAScript 6)是即將到來的新版本JavaScript語言的標(biāo)準(zhǔn),代號harmony(和諧之意,顯然沒有跟上我國的步伐,我們已經(jīng)進(jìn)入版本了)。上一次標(biāo)準(zhǔn)的制訂還是2009年出臺的ES5。目前ES6的標(biāo)準(zhǔn)化工作正在進(jìn)行中,預(yù)計會在14年12月份放出正式敲定的版本。但大部分標(biāo)準(zhǔn)已經(jīng)就緒,且各瀏覽器對ES6的支持也正在實現(xiàn)中。
技術(shù)雖然發(fā)展太快,但是我們不停下學(xué)習(xí)的步伐,就不會被新技術(shù)淘汰,下面我們一起來學(xué)習(xí)es6的新特征吧。
箭頭操作符
如果你會C#或者Java,你肯定知道lambda表達(dá)式,ES6中新增的箭頭操作符=>便有異曲同工之妙。它簡化了函數(shù)的書寫。操作符左邊為輸入的參數(shù),而右邊則是進(jìn)行的操作以及返回的值Inputs=>outputs。
我們知道在JS中回調(diào)是經(jīng)常的事,而一般回調(diào)又以匿名函數(shù)的形式出現(xiàn),每次都需要寫一個function,甚是繁瑣。當(dāng)引入箭頭操作符后可以方便地寫回調(diào)了。請看下面的例子:
類的支持
ES6中添加了對類的支持,引入了class關(guān) 鍵字(其實class在JavaScript中一直是保留字,目的就是考慮到可能在以后的新版本中會用到,現(xiàn)在終于派上用場了)。JS本身就是面向?qū)ο?的,ES6中提供的類實際上只是JS原型模式的包裝?,F(xiàn)在提供原生的class支持后,對象的創(chuàng)建,繼承更加直觀了,并且父類方法的調(diào)用,實例化,靜態(tài)方 法和構(gòu)造函數(shù)等概念都更加形象化。
下面代碼展示了類在ES6中的使用:
增強(qiáng)的對象字面量
對象字面量被增強(qiáng)了,寫法更加簡潔與靈活,同時在定義對象的時候能夠做的事情更多了。具體表現(xiàn)在:
1.可以在對象字面量里面定義原型
2.定義方法可以不用function關(guān)鍵字
3.直接調(diào)用父類方法
這樣一來,對象字面量與前面提到的類概念更加吻合,在編寫面向?qū)ο蟮腏avaScript時更加輕松方便了。
字符串模板
字符串模板相對簡單易懂些。ES6中允許使用反引號 ` 來創(chuàng)建字符串,此種方法創(chuàng)建的字符串里面可以包含由美元符號加花括號包裹的變量 ${vraible}。如果你使用過像C#等后端強(qiáng)類型語言的話,對此功能應(yīng)該不會陌生。
解構(gòu)
自動解析數(shù)組或?qū)ο笾械闹?。比如若一個函數(shù)要返回多個值,常規(guī)的做法是返回一個對象,將每個值做為這個對象的屬性返回。但在ES6中,利用解構(gòu)這一特性,可以直接返回一個數(shù)組,然后數(shù)組中的值會自動被解析到對應(yīng)接收該值的變量中。
參數(shù)默認(rèn)值,不定參數(shù),拓展參數(shù)
默認(rèn)參數(shù)值
現(xiàn)在可以在定義函數(shù)的時候指定參數(shù)的默認(rèn)值了,而不用像以前那樣通過邏輯或操作符來達(dá)到目的了。
不定參數(shù)
不定參數(shù)是在函數(shù)中使用命名參數(shù)同時接收不定數(shù)量的未命名參數(shù)。這只是一種語法糖,在以前的JavaScript代碼中我們可以通過arguments變量來達(dá)到這一目的。不定參數(shù)的格式是三個句點后跟代表所有不定參數(shù)的變量名。
比如下面這個例子中,…x代表了所有傳入add函數(shù)的參數(shù)。
拓展參數(shù)
拓展參數(shù)則是另一種形式的語法糖,它允許傳遞數(shù)組或者類數(shù)組直接做為函數(shù)的參數(shù)而不用通過apply。
let與const 關(guān)鍵字
可以把let看成var,只是它定義的變量被限定在了特定范圍內(nèi)才能使用,而離開這個范圍則無效。const則很直觀,用來定義常量,即無法被更改值的變量。
for of 值遍歷
我們都知道for in循環(huán)用于遍歷數(shù)組,類數(shù)組或?qū)ο螅珽S6中新引入的for of循環(huán)功能相似,不同的是每次循環(huán)它提供的不是序號而是值。
iterator, generator
1.iterator: 它是這么一個對象,擁有一個next方法,這個方法返回一個對象{done,value},這個對象包含兩個屬性,一個布爾類型的done和包含任意值的value
2.iterable: 這是這么一個對象,擁有一個obj[@@iterator]方法,這個方法返回一個iterator
3.generator: 它是一種特殊的iterator。反的next方法可以接收一個參數(shù)并且返回值取決與它的構(gòu)造函數(shù)(generator function)。generator同時擁有一個throw方法
4.generator函數(shù): 即generator的構(gòu)造函數(shù)。此函數(shù)內(nèi)可以使用yield關(guān)鍵字。在yield出現(xiàn)的地方可以通過generator的next或throw方法向外界傳遞值。generator 函數(shù)是通過function*來聲明的
5.yield關(guān)鍵字:它可以暫停函數(shù)的執(zhí)行,隨后可以再進(jìn)進(jìn)入函數(shù)繼續(xù)執(zhí)行
模塊
在ES6標(biāo)準(zhǔn)中,JavaScript原生支持module了。這種將JS代碼分割成不同功能的小塊進(jìn)行模塊化的概念是在一些三方規(guī)范中流行起來的,比如CommonJS和AMD模式。
將不同功能的代碼分別寫在不同文件中,各模塊只需導(dǎo)出公共接口部分,然后通過模塊的導(dǎo)入的方式可以在其他地方使用。
這些是新加的集合類型,提供了更加方便的獲取屬性值的方法,不用像以前一樣用hasOwnProperty來檢查某個屬性是屬于原型鏈上的呢還是當(dāng)前對象的。同時,在進(jìn)行屬性值添加與獲取時有專門的get,set方法。
上面代碼我已加了注釋,這里進(jìn)一步解釋。對于處理程序,是在被偵聽的對象身上發(fā)生了相應(yīng)事件之后,處理程序里面的方法就會被調(diào)用,上面例子中我們設(shè)置了set的處理函數(shù),表明,如果我們偵聽的對象的屬性被更改,也就是被set了,那這個處理程序就會被調(diào)用,同時通過參數(shù)能夠得知是哪個屬性被更改,更改為了什么值。
Symbols
我們知道對象其實是鍵值對的集合,而鍵通常來說是字符串。而現(xiàn)在除了字符串外,我們還可以用symbol這種值來做為對象的鍵。Symbol是一種 基本類型,像數(shù)字,字符串還有布爾一樣,它不是一個對象。Symbol 通過調(diào)用symbol函數(shù)產(chǎn)生,它接收一個可選的名字參數(shù),該函數(shù)返回的symbol是唯一的。之后就可以用這個返回值做為對象的鍵了。Symbol還可以用來創(chuàng)建私有屬性,外部無法直接訪問由symbol做為鍵的屬性值。
有關(guān)ES6的新特性就給大家介紹這么多,希望對大家有所幫助!
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com