ECMAScript的版本现在已经进行到2017了,前端社区这几年的蓬勃发展让JS这个本来有着很多缺陷的浏览器脚本语言成为现在应用广泛,特性完备的新时代“主流语言”。我们一边在感叹技术发展太快感到疲惫的同时,又为前端世界越来越好感到高兴。本文我们来看一下ES2017有哪些新特性!
什么是ECMAScript
ECMAScript是javascript的子集,在网景公司最初引用javascript作为浏览器监本语言之后,不同浏览器厂商发明了与javascript类似的脚本语言,比如ActionScript, JScript。但是这样很明显对开发者很不友好,阻碍了前端乃至web世界的发展,为了标准化,网景公司将javascript提交给了欧洲计算机制造商协会(European Computer Manufacturers Association)进行标准化的工作,并编号为ECMA-262,所以因为这样的历史原因,现在我们讨论的就是ECMAScript。
在ECMA中有两种组织,分别是Technical Committees和Technical Groups,负责不同领域的标准化工作,其中负责ECMAScript的是TC39。
在每个版本的推出过程中,有时候会因为某些特性推迟时间过长导致整个版本的推出时间延迟,比如es5和se6之间隔了六年。为了避免这个问题,TC39将计划标准化的feature划分几个级别,表示它现在所处的状态。
他们分别是:
stage-0
strawman 稻草人。组织成员或者注册开发者提交的建议,说实话不太理解外国人的命名…..stage-1
proposal 提案。筛选出来的正式提案。在这个阶段的feature就表明TC39愿意花时间去做这个事情。stage-2
draft 草案。TC39已经做了一些工作,需要未来的实现。stage-3
candidate 候选。到这个阶段的feature差不多已经做完了,就差一下修修补补的工作了。stage-4
finished 结束。所有的标准化已经完成了,马上就会发布在下一个版本的标准当中。
通过采用这样的方法,TC39计划每年发布一个新版本,这为ECMAScript的蓬勃发展提供了保证。
新特性
es2017相对于2016来说更新了较大一部分feature。下面我们来分别聊一下。
异步函数
异步函数是这次更新的额一个重要部分,js作为一个以异步为卖点的语言竟然到现在才支持异步函数也是神奇。异步函数的用法很简单,只需要在声明的前面加一个async
关键字即可。
1 | async function foo () {} |
值得注意的是,所有异步函数返回的额都是一个Promise对象。因此我们可以按照处理Promise的代码来处理异步函数。(关于编写异步的Javascript代码我另外写了一篇文章)。
### 对象遍历
新增了Object.values 和 Object.entries两个方法,新增的两个方法使得遍历对象更加方便,之前我们对象的方法通常是用Object.keys, for…in, for…of。三种方法都不是很直接,因为我们通常更关心的是每个对象的value,而不是key。新增的方法很好的弥补了这个缺陷。
第一个方法输入一个对象,输出一个包含对象所有值的数组。
1 | const obj = { |
第二个方法输入一个对象,输出一个元素为键值数组的二维数组。我们可以这么使用:
1 | const obj = { |
函数参数列表中允许逗号
在对象和数组中,这个语法特性早已被实现,不过说实话,这个特性对我来说并没有什么用处。
1 | function foo(a, b,) { |
字符串填充
新增了两个字符串填充方法:String.padStart() 和 String.padEnd(),分别在字符串的左边和右边填充字符。
1 | // String.prototype.padStart(maxLength, fillString="") |
还有两个新增特性分别是Object.getOwnPropertyDescriptors()
和Shared Memory, Atomics。自己平时还接触不到使用场景,这里就不做探讨了~
感谢阅读~