简介

自从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 ** 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的新特性就这两个,比较简单,今天就介绍到这里。

本文作者:flydean程序那些事

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

本文来源:flydean的博客

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

ECMAScript 2016(ES7)新特性简介的更多相关文章

  1. ECMAScript 2017(ES8)新特性简介

    目录 简介 Async函数 共享内存和原子操作 Object的新方法 String的新方法 逗号可以添加到函数的参数列表后面了 简介 ES8是ECMA协会在2017年6月发行的一个版本,因为是ECMA ...

  2. ECMAScript 2018(ES9)新特性简介

    目录 简介 异步遍历 Rest/Spread操作符和对象构建 Rest Spread 创建和拷贝对象 Spread和bject.assign() 的区别 正则表达式 promise.finally 模 ...

  3. ECMAScript 2019(ES10)新特性简介

    简介 ES10是ECMA协会在2019年6月发行的一个版本,因为是ECMAScript的第十个版本,所以也称为ES10. 今天我们讲解一下ES10的新特性. ES10引入了2大特性和4个小的特性,我们 ...

  4. ECMAScript 2020(ES11)新特性简介

    目录 简介 动态imports import.meta export加强 BigInt matchAll() globalThis Promise.allSettled() ??操作符 ?.操作符 总 ...

  5. ECMAScript 2021(ES12)新特性简介

    简介 ES12是ECMA协会在2021年6月发行的一个版本,因为是ECMAScript的第十二个版本,所以也称为ES12. ES12发行到现在已经有一个月了,那么ES12有些什么新特性和不一样的地方呢 ...

  6. SharePoint 2016 的新特性概览(二)(What's New for IT Professionals in SharePoint Server 2016)

    博客地址:http://blog.csdn.net/FoxDave SharePoint 2016 的新特性 三. 监测和数据(Insights and Data) 实时数据监测,包括对使用情况.存储 ...

  7. SharePoint 2016 的新特性概览(一)(What's New for IT Professionals in SharePoint Server 2016)

    博客地址:http://blog.csdn.net/FoxDave 今天看霖雨大神的转的微软最新的关于SharePoint 2016的Update,正好看到了SP2016新发布的视频,整理一下发出 ...

  8. ES6新特性简介

    ES6新特性简介 环境安装 npm install -g babel npm install -g babel-node //提供基于node的REPL环境 //创建 .babelrc 文件 {&qu ...

  9. ECMAScript 2016(ES7) 知多少

    ECMAScript 2016(ES7) 知多少 1. 数组方法 Array.prototype.includes(value : any) : boolean 2. 幂运算符 x ** y 扩展阅读 ...

随机推荐

  1. 在Python中使用BeautifulSoup进行网页爬取

    目录 什么是网页抓取? 为什么我们要从互联网上抓取数据? 网站采集合法吗? HTTP请求/响应模型 创建网络爬虫 步骤1:浏览并检查网站/网页 步骤2:创建用户代理 步骤3:导入请求库 检查状态码 步 ...

  2. hdu-1159 1087 1257(dp)

    本文就最长公共子序列,最长连续递增子序列的长度,最大连续递增子序列的值进行对比. hdu-1159: Common Subsequence Time Limit: 2000/1000 MS (Java ...

  3. hdu2333-贪心,如何去后效性,背包太大怎么办,如何最大化最小值,从无序序列中发掘有序性质

    补充一下我理解的中文题意.. 你要重新组装电脑..电脑有一些部件..你的预算有b,b(1~1e9),有n个部件..每个部件有类型和名称以及价钱和质量现在你要在不超过预算b的情况下..每个类型都买一个部 ...

  4. windows脚本bat编程:WIN10脚本自动启动虚拟环境中的jupyter

    python编程对各种扩展包的版本依赖较严格,为了解决版本差异,通用情况下会使用virtualenv创建的虚拟环境来独立应用.那么每次使用的时候就需要启动虚拟环境,如果每次都是手工启动,每次输入几条命 ...

  5. const,volatile,static,typdef,几个关键字辨析和理解

    1.const类型修饰符 const它限定一个变量初始化后就不允许被改变的修饰符.使用const在一定程度上可以提高程序的安全性和可靠性.它即有预编译命令的优点也有预编译没有的优点.const修饰的变 ...

  6. soft tab

    soft tab hard-tabs 是硬件 tab,就是按一个 tab 键; soft-tabs 是软件 tab,通过按 4个 space 键实现; refs Tabs vs. Spaces, FR ...

  7. vscode & javascript & react & "editor.foldingStrategy": "indentation"

    vscode & javascript & react & "editor.foldingStrategy": "indentation" ...

  8. React Native hot reloading & Android & iOS

    React Native hot reloading & Android & iOS https://facebook.github.io/react-native/docs/debu ...

  9. Flutter: 设置简单的启动屏

    更多代码参考 有短暂的白屏时间 import 'dart:async'; import 'package:flutter/material.dart'; import 'package:flutter ...

  10. 新手如何通过SPC算力生态获得多重收益?

    DeFi市场在去年的一波又一波热潮之后,在今年余温有些褪去.而资本市场也将目光从DeFi市场中转移开来,他们将目光对准了新的市场,即算力市场.算力,其实从区块链技术在大范围普及以来,就是一个常见的话题 ...