天天看点

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的博客 欢迎关注我的公众号:「程序那些事」最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

继续阅读