天天看點

ECMAScript 2019(ES10)新特性簡介

簡介

es10是ecma協會在2019年6月發行的一個版本,因為是ecmascript的第十個版本,是以也稱為es10.

今天我們講解一下es10的新特性。

es10引入了2大特性和4個小的特性,我們接下來一一講解。

array的新方法flat和flatmap

在es10中,給array引入了兩個新的方法,分别是flat和flatmap。

先來看一下flat。

我們看一下 array.prototype.flat() 的定義:

flat的作用是将array中的array中的内容取出來,放到最頂層array中。我們可以傳入一個depth參數,表示的是需要flat的array層級。

舉個例子:

當depth=0的時候,就表示不會對array内置的array進行flat操作。

我們再看一下array.prototype.flatmap()的定義:

flatmap是map和flat的結合,下面的兩個操作是等價的:

我們看幾個flatmap的例子:

object的新方法fromentries

object.fromentries的主要作用就是通過給定的[key,value],來建立新的object對象。

上面例子中,我們通過給定的兩個key-value對,建立了新的object對象。

和fromentries相反的方法,就是object.entries,用來周遊對象屬性。

還是剛剛的例子,我們再調用一下object.entries方法:

string的新方法trimstart和trimend

js中已經有了trim的方法,可以消除string前後的空格。

但有時候可能需要消除前面或者後面的空格,es10引入了trimstart和trimend方法:

注意,有些浏覽器可能已經有了trimleft和trimright方法,在emcascript規範中,他們和trimstart,trimend是等價的。

可通路的symbol的description屬性

我們在建立symbol的時候,可以傳入一個description作為參數來建構symbol:

在es10之前,我們想要通路symbol的description是這樣做的:

現在我們可以直接通過description屬性來通路了:

可忽略的catch參數

在傳統的寫法中,catch是要接受一個error參數的:

但有時候我們已經知道這個異常是不重要的,或者說,我們想忽略掉這個異常,那麼在es10中,我們可以省略這個error參數:

array的穩定排序

array有個sort功能,可以根據元素内容進行排序。

es10中引入了穩定排序的概念,也就是說如果排序的key是相同的,那麼這些相同key的順序在排序中是不會發生變化的。

我們根據key來進行排序,進而讓a,排在b前面,但是兩個key=b的元素位置是不會變化的。

json.stringify

json是一個很友善的資料傳輸格式,它不像xml那麼複雜,優點就是體積小,便于傳輸。

根據rfc3629的規範,在公共環境中傳輸json,必須使用utf-8進行編碼。

json text exchanged between systems that are not part of a closed ecosystem must be encoded using utf-8 [rfc3629].

在講json.stringify之前,我們先回顧一下es6中的escape sequences。

es6中有三種escape:

hex escape:16進制escape。轉義的是2位的16進制。

unicode escape:轉義的是4位的16進制

unicode code point escape:轉義的是1位或者多位的16進制

最後一個轉義是在es6中引入的。

unicode字元集最後是要存儲到檔案或者記憶體裡面的,直接存儲的話,空間占用太大。那怎麼存呢?使用固定的1個位元組,2個位元組還是用變長的位元組呢?于是我們根據編碼方式的不同,分成了utf-8,utf-16,utf-32等多種編碼方式。

其中utf-8是一種變長的編碼方案,它使用1-4個位元組來存儲。utf-16使用2個或者4個位元組來存儲。

而utf-32是使用4個位元組來存儲。這三種編碼方式中,隻有utf-8是相容ascii的,這也是為什麼國際上utf-8編碼方式比較通用的原因(畢竟計算機技術都是西方人搞出來的)。

我們知道在unicode編碼中,u+d800到u+dfff的這些字元是預留給utf-16使用,如果我們輸入的是這個範圍内的字元的話,是無法被轉換成為utf-8格式的。

這就是原來的json.stringify可能出現的問題。

在es10中,json.stringify對于這些不可轉換成utf-8的字元,直接傳回對應的code unit escape sequences。

json 被歸為ecmascript的子集

在之前,json不是ecmascript的子集,進而導緻有些可以在json中包含的字元,不能夠在ecmascript的字面量中出現,比如u+2028 和u+2029 :

這次改變之後,我們在編碼的時候就不需要再去區分是json還是ecmascript了。

function的tostring方法

在es10中,如果function可以通過以ecmascript源代碼的方式表示的話,則tostring會直接傳回這個函數的代碼:

如果是一些native的方法,比如底層c或者c++實作的代碼,則直接傳回<code>[native code]</code>:

本文作者:flydean程式那些事 本文連結:http://www.flydean.com/ecmascript-10/ 本文來源:flydean的部落格 歡迎關注我的公衆号:「程式那些事」最通俗的解讀,最深刻的幹貨,最簡潔的教程,衆多你不知道的小技巧等你來發現!

繼續閱讀