ECMAScript 2016(ES7)新特性简介

简介: 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,基本上都是国际的大公司组成的:


image.png

然后次一级的叫做Associate Members:


image.png

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


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 ** 2
36


上面的例子表示的是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 * 2
8
> 2 ** (2*2)
16


总结



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

相关文章
|
存储 SQL 机器学习/深度学习
用户画像标签体系——从零开始搭建实时用户画像(三)
用户画像标签体系——从零开始搭建实时用户画像(三)
3247 0
用户画像标签体系——从零开始搭建实时用户画像(三)
|
SQL 关系型数据库 MySQL
如何使用MySQL Binlog Digger 4.14对binlog日志进行挖掘分析以便快速恢复误删除数据
MySQL Binlog Digger是一款运行在windows操作系统的挖掘与分析MySQL binlog的可视化工具,通过它可以快速打回被误操作时的数据,例如:delete, insert, update操作,并依据这些误操作生成相应的undo回滚语句,以便快速恢复数据,此外,它还可以支持离线binlog挖掘分析与binlog下载,它仅支持dml操作的回滚,但不支持ddl的回滚。
4789 1
如何使用MySQL Binlog Digger 4.14对binlog日志进行挖掘分析以便快速恢复误删除数据
|
9月前
分布匹配蒸馏:扩散模型的单步生成优化方法研究
扩散模型在生成高质量图像方面表现出色,但其迭代去噪过程计算开销大。分布匹配蒸馏(DMD)通过将多步扩散简化为单步生成器,结合分布匹配损失和对抗生成网络损失,实现高效映射噪声图像到真实图像,显著提升生成速度。DMD利用预训练模型作为教师网络,提供高精度中间表征,通过蒸馏机制优化单步生成器的输出,从而实现快速、高质量的图像生成。该方法为图像生成应用提供了新的技术路径。
380 2
|
自然语言处理 编译器 程序员
【头文件】对.h文件的理解
【头文件】对.h文件的理解
443 1
|
11月前
|
运维 监控 网络协议
网络诊断必备:Ping、Traceroute、Wireshark的实用技巧详解
网络诊断必备:Ping、Traceroute、Wireshark的实用技巧详解
2173 0
|
存储 自然语言处理 开发者
通用性与灵活性对大模型的影响
通用性与灵活性对大模型的影响
|
Web App开发 数据采集 Python
让ChromeDriver 125顺利运行:解决找不到chromedriver.exe的技巧
本文介绍了如何解决Selenium使用ChromeDriver时遇到的版本不匹配问题,以及如何设置环境变量。同时,文章提供了示例代码,展示如何在Python中配置Selenium使用代理IP、设定User-Agent和Cookie进行网页抓取,以提高爬虫的效率和成功率。确保ChromeDriver与Chrome浏览器版本一致,将`chromedriver.exe`添加到环境变量,然后使用`Options`和`Proxy`类配置代理和浏览器选项,最后通过`webdriver.Chrome()`启动浏览器并执行抓取任务。
1041 0
让ChromeDriver 125顺利运行:解决找不到chromedriver.exe的技巧
|
SQL 关系型数据库 MySQL
MySQL DCL(数据控制语言)详解与实践
MySQL DCL(数据控制语言)详解与实践
|
算法 计算机视觉
【MATLAB】GWO灰狼算法优化的VMD信号分解算法
【MATLAB】GWO灰狼算法优化的VMD信号分解算法
1348 0
【MATLAB】GWO灰狼算法优化的VMD信号分解算法
|
存储 NoSQL 分布式数据库
Hbase的三种索引_全局索引,覆盖索引,本地索引(七)
Hbase的三种索引_全局索引,覆盖索引,本地索引(七)
391 0