箭頭函數(arrows)
箭頭是一個函數的縮寫通過使用=>
標識符, 這看起來有點像c#
,java 8
和coffeescript
的寫法,它同時支持陳述代碼塊和表達式代碼塊以返回表達式值,和函數不同,箭頭函數在它的作用域內共享同一個this指針
類(classes)
ES6
中的類僅僅是一個基于原型鏈oo
模型的語法糖.簡單方便的寫法使得類模型更易使用和操作,類支持基于原型鏈的繼承,父級調用,實例,靜態方法和構造函數.
對象字面量擴展語法(enhanced object literals)
對象語法被繼承以支持設置構造函數的屬性,簡化以前定義屬性(foo:foo
),定義方法,作父級調用的寫法,同時支持用表達式設置屬性名.總而言之,它使得對象的字面量含義和類的聲明結合的更緊了,基于對象的設計也同樣受益于寫法的簡化.
模板字符串(template strings)
模板字符串為構造字符串提供了語法糖,這類似于perl
,python
等其他語言的字符串寫法.作用包括但不限于:能夠通過添加一個標簽使得字符串的構造自定義化;避免注入攻擊;以及從當前字符串內容構造更高級的數據結構.
表達式解構(destructuring)
解構允許賦值使用模式匹配,支持數組和對象的匹配.解構是可降級的,類似于標準的對象查找,當匹配失敗時返回undefined
.
默認參數+后續參數+傳參(default+rest+spread)
允許給形參設置默認值.在一個函數聲明中用一個數組來表示一組連續的參數,這允許把后續參數都綁定到數組.它使得后續更改參數和處理常用案例更加直接
新的變量(let + const)
定義了塊級作用域.let是新的變量定義方式.const定義了常量(唯一賦值),它們必須先定義再調用
迭代器+ for...of
迭代器對象類似于CLR IE迭代器和java迭代器,用for..of
進行自定義迭代,不再需要專門定義一個數組,使類似于LINQ
的懶人設計模式成為可能.
生成器(generator)
生成器簡化了迭代編程通過使用function*
和yield
.當一個function*
函數被聲明時會返回一個生成器實例.生成器是迭代器的一個子類型,它同時新定義了next()方法和throw()方法.這使得值能返還到生成器,yield
會返回一個值到主線程(或拋出)
編碼標準(unicode)
不間斷的更新以支持unicode編碼,包括新的字符串形式的unicode文字形式,新的正則表達式u模式來操作代碼,以及新的APIs來操作字符串在21位量級.這些更新支持用javascript構建全球化應用.
模塊化(modules)
對于自定義組件的模塊化的原生支持.它由流行的javascript模塊加載器(AMD,CommonJS)演變而來.運行方式由一個自定義的默認加載器來定義.內含異步模塊--代碼不會運行直到請求模塊可用且被執行.
模塊加載器(module loaders)
模塊加載器支持:
- 動態加載
- 聲明隔離
- 全局命名空間隔離
- 編譯鉤子
- 內置的虛擬化
這些默認的模塊加載器可以被配置,并且新的加載器可以被構造以分析和加載代碼在隔離的連續的上下文中
新的數據結構(Map+Set+WeakMap+WeakSet)
有效的數據結構用于常用算法,WeakMaps提供了一個密封的,可用對象作為key的映射表
代理(proxies)
代理使得對象的創建以及它的所有行為對主機對象可用.它能被用于攔截,對象虛擬化,記錄/分析等.
Symbols
symbols增加了對對象聲明的獲取控制.Symbols允許屬性的鍵被設置成字符串形式或symbol形式.Symbols是一種新的原始類型.可選的description參數用于試.Symbols是唯一的(類似于gensym),但它們不是私有的,由于他們可以通過object.getOwnPropertySymbols獲取到
Subclassable Built-ins
在ES6
中,內置像數組一樣。日期元素和dom節點元素可以被子類化
以前對象的構造函數現在使用兩步來完成.
使用create來將方法掛在一個對象下,給方法定義各種行為
用新的實例來解析構造函數以初始化
以前著名的create方法現在寫作Symbol.create.內置 現在更明確的暴露他們的create方法
Math+Number+String+Array+Object APIs
許多新的庫的增加,包括核心Math庫,Array conversion helpers, String helpers以及object.assign用于復制
二進制文字和八進制文字
兩種新的數字格式的增加(二進制(b)和八進制(o))
Promises
Promises是一個異步編程庫,它的作用便是“免去”異步操作的回調函數,保證能通過后續監聽而得到返回值.Promises已被許多存在的javascript庫所使用.
Reflect API
全映射API將對象上的一些屬于語言內部的方法掛到reflect對象上.reflect對象的方法和proxy對象的方法一一對應,并且使得對reflect對象和proxy對象方法的訪問一致.這在實施代理時尤為有用.
tail calls
句尾調用確保了棧不會無限的增長.當面臨無限大的輸出時使得遞歸算法安全.