写点什么

ECMAScript 2016(ES7) 新特性简介

发布于: 2021 年 03 月 12 日
ECMAScript 2016(ES7)新特性简介

简介

自从 ES6(ECMAScript 2015)在 2015 年发布以来,ECMAScript 以每年一个版本的速度持续向前发展。到现在已经是 ECMAScript 2020 了。


每个版本都有一些新的特性,今天本文将会讲解 ES7 中带来的新特性。


TC39 和 ECMAScript

先讲一下 ECMA 的历史,ECMA 在于 1960 年 4 月 27 日成立的制造商协会,其目的是统一标准,方便在不同的制造商之间移植。于是这个协会被命名为 European Computer Manufacturers Association,简称 ECMA。


在 1994,为了体现 ECMA 协会的全球性活动,改名为欧洲标准化信息和通信系统协会 European association for standardizing information and communication systems。虽然名字还保留了欧洲的字样,但是其本身已经是一个国际性协会了。


我们大概看一下 ECMA 协会的会员都有哪些,优先级最高的会员叫做 Ordinary Members,基本上都是国际的大公司组成的:



然后次一级的叫做 Associate Members:



可以看到里面有几个中国的公司,说明中国已经在世界上的规则制定方面有了一定的话语权。


TC39 就是 ECMA 协会下属的一个专门用来指定 ECMAScript 标准的委员会。TC 的意思是 Technical Committees。


ECMA 下属的 TC 有很多个,而 TC39 专门就是负责 ECMAScript 的发展。


TC39 下面又分为两个 Task groups。分别是:


  • TC39-TG1 — General ECMAScript® Language 负责 ECMAScript 的发展

  • TC39-TG2 — ECMAScript® Internationalization API Specification 负责 ECMAScript 国际化 API 的制定

我们知道 ES5 是在 2009 年制定的,而 ECMAScript 2015 (ES6)是在 2015 年制定的,因为 ES6 包含了 6 年的改动,所以 ES6 的改动非常的大。


为了减少各大厂商对 ECMA 脚本的升级适应压力,从 ES6 之后,ECMA 协会决定每年发一个 ECMA 版本。


下面给大家讲解一下 ECMAScript 是怎么发布的。ECMAScript 的发布主要分为下面的 5 个阶段:


  • Stage 0: strawman

这是自由提交的阶段,但是提交者必须是 TC39 member 或者 TC39 contributor。


  • Stage 1: proposal

Stage 0 的 strawman 被 TC39 review 之后,就到了 proposal 阶段。


在这个阶段必须知道谁来负责这个 proposal,同时需要提交这个提案的示例,API 以及语义和算法的实现。还需要指明这个提案和现有的功能之间的可能冲突的地方。


如果这个提案被 TC39 接受了。那么表示 TC39 将会继续跟进这个提案。


  • Stage 2: draft

这个是提案的第一个版本,该提案还必须具有对该功能的语法和语义的形式化描述(使用 ECMAScript 规范的形式语言)。描述需要应尽可能完整,但可以包含待办事项和占位符。


  • Stage 3: candidate

这个阶段的提案已经大部分完成了,需要根据用户的反馈来进行下一步的调整。


  • Stage 4: finished

这个阶段的提案已经准备被包含在下一个 ECMAScript 的版本中了。


ECMAScript 2016(ES7)的新特性

实际上,ECMAScript 2016(ES7)只有两个新特性:


  • Array.prototype.includes

  • Exponentiation operator (**)

Array 的新方法 includes

ES7 为 Array 添加了新的方法 includes,我们看下使用的例子:


> ['a', 'b', 'c'].includes('a')true> ['a', 'b', 'c'].includes('d')false
复制代码

看一下 includes 的定义:


Array.prototype.includes(value : any) : boolean
复制代码

如果 value 包含在 Array 中,那么将会返回 true,如果没有包含则会返回 false。


可以看到 includes 和 indexOf 比较类似:


arr.includes(x)
复制代码

等价于:


arr.indexOf(x) >= 0
复制代码


他们的区别在于,includes 可以查找 NaN,而 indexOf 不能:


> [NaN].includes(NaN)true> [NaN].indexOf(NaN)-1
复制代码

另外 include 是不区分+0 和-0 的:


> [-0].includes(+0)true
复制代码

我们知道 JS 中的数组除了 Array 之外,还有 Typed Array,比如:


  • Int8Array

  • Uint8Array

  • Uint8ClampedArray

  • Int16Array

  • Uint16Array

  • Int32Array

  • Uint32Array

  • Float32Array

  • Float64Array

  • BigInt64Array

  • BigUint64Array

所以 includes 方法也适用于 TypedArray:


let tarr = Uint8Array.of(12, 5, 3);console.log(tarr.includes(5)); // true
复制代码

幂操作符 **

ES7 引入了幂操作符 ** :


> 6 ** 236
复制代码

上面的例子表示的是 6 的 2 次方。


x ** y 的值和 Math.pow(x, y) 是等价的。


我们看下幂操作符的基本使用:


const squared = 3 ** 2; // 9
let num = 3;num **= 2;console.log(num); // 9
function dist(x, y) { return Math.sqrt(x**2 + y**2);}
复制代码

幂操作符的优先级是非常高的,** > * > +


> 2**2 * 28> 2 ** (2*2)16
复制代码

总结

ES7 的新特性就这两个,比较简单,今天就介绍到这里。


本文作者:flydean 程序那些事

本文链接:http://www.flydean.com/ecmascript-7/

本文来源:flydean 的博客

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


发布于: 2021 年 03 月 12 日阅读数: 9
用户头像

关注公众号:程序那些事,更多精彩等着你! 2020.06.07 加入

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧,尽在公众号:程序那些事!

评论

发布
暂无评论
ECMAScript 2016(ES7)新特性简介