ES6解決了什麼問題

ECMAScript 6.0於2015 年 6 月正式發佈了,成爲JavaScript 語言的下一代標準。ES6增長的語言特性解決了哪些問題,會給開發者哪些便利,是本文主要探討的問題。es6

增長了對unicode字符的支持

ES5對字符的處理有限,沒法很好地處理碼點大於0xFFFF的字符。正則表達式

ES6在string原生方法中支持碼點大於0xFFFF的字符,取得碼點或是遍歷,均可以直接操做;而且對字符不一樣的表示方法作了統一化。編程

在正則表達式裏新增\u \s修飾符,使得正則對特殊字符的匹配不須要開發者額外處理。promise

異步編程

ES6 前異步編程的解決方式:數據結構

  • 回調函數
  • 事件監聽
  • 發佈/訂閱
  • 自定義promise

Promise

ES6提供了原生的Promise對象,統一了用法和標準。異步

  • 對象的狀態不受外界影響。可以方便地獲取異步操做的狀態、賦予對應操做。
  • 一旦狀態改變,就不會再變,任什麼時候候均可以獲得這個結果。

缺點async

  • 沒法取消Promise,一旦新建它就會當即執行,沒法中途取消。
  • 若是不設置回調函數,或在catch中再次拋出錯誤。Promise內部拋出的錯誤,不會反應到外部。
  • 當處於pending狀態時,沒法得知目前進展到哪個階段(剛剛開始仍是即將完成)。

Generator

Generator 函數形式上與普通函數無異,特徵有二模塊化

  1. function關鍵字與函數名之間有一個星號;
  2. 函數體內部使用yield表達式,來代表函數執行的狀態。

意義:異步編程

  • 能夠交出函數的執行權(即暫停執行)函數

  • 函數體內外的數據交換

    能夠在 Generator 函數運行的不一樣階段,調整函數行爲。包括從外部向內部注入不一樣的值,控制返回和拋出錯誤。

async

(ES2017 標準引入)

從理解上來講, async函數至關於把Generator 函數的星號(*)替換成async,將yield替換成await

但相比較generate而言,內置執行器,有更易於理解的語義。

async函數返回一個 Promise 對象,可使用then方法添加回調函數。async函數內部return語句返回的值,會成爲then方法回調函數的參數。

當函數執行的時候,一旦遇到await就會先返回,等到異步操做完成,再接着執行函數體內後面的語句。

減小全局變量和方法

好比,ES6 將全局方法parseInt()和parseFloat(),移植到Number對象上面。 逐步減小全局性方法,使得語言逐步模塊化。

代碼做用域

變量的聲明方式

增長let,const的變量聲明方式,不存在變量提高,不容許重複聲明,使語言使用更加嚴謹。

塊級做用域

使得變量的做用域更利於管理,也使得當即執行函數表達式再也不必要了。

箭頭函數

讓this綁定定義時所在的做用域,而不是指向運行時所在的做用域,也使得表達更加簡潔。

語法糖

ES6推出了模版字符串,使得多行字符串及夾雜變量的字符串寫起來更加方便。

對象增長屬性名錶達式與簡潔表示法。

增長遍歷器機制,爲各類不一樣的數據結構提供統一的訪問機制。

增長解構的語法,取值更直觀方便。

增長class關鍵字來定義類,過去,生成實例對象的傳統方法是經過構造函數。再也不和傳統面嚮對象語言有大的差別。且支持extends。

元編程

引入Proxy對象,能夠攔截某些操做並實現自定義行爲。

引入 Rflect對象,能夠獲取默認操做,能夠將默認操做從處理程序轉發到目標。

Symbol

symbol 是一種基本數據類型 ,提供一種機制,保證每一個屬性的名字都是獨一無二,從根本上防止屬性名的衝突。

更多的原生方法

ES6提供了更多的原生方法,避免了開發者重複造輪子。如字符串的查找。

  • 正則的匹配規則,如新加的y、s修飾符。

  • 增長了set、map的數據結構。

  • 增長Number.EPSILON等數值方法,使得對數值操做易於在精度方面進行控制。 //雖然JavaScript 不適合進行科學和金融方面的精確計算

  • 增長對對象的操做與讀取的API。

優化

對尾遞歸進行優化,賦予javscript運行復雜度更高的方法的能力。


參考

ECMAScript 6 入門

相關文章
相關標籤/搜索