关于ECMAScript
ECMAScript和JavaScript的关系
1996 年 11 月,JavaScript 的创造者 Netscape 公司,决定将 JavaScript 提交给标准化组织 ECMA,希望这种语言能够成为国际标准。次年,ECMA 发布 262 号标准文件(ECMA-262)的第一版,规定了浏览器脚本语言的标准,并将这种语言称为 ECMAScript,这个版本就是 1.0 版。、
该标准从一开始就是针对 JavaScript 语言制定的,但是之所以不叫 JavaScript,有两个原因。一是商标,Java 是 Sun 公司的商标,根据授权协议,只有 Netscape 公司可以合法地使用 JavaScript 这个名字,且 JavaScript 本身也已经被 Netscape 公司注册为商标。二是想体现这门语言的制定者是 ECMA,不是 Netscape,这样有利于保证这门语言的开放性和中立性。
因此,ECMAScript 和 JavaScript 的关系是,前者是后者的规格,后者是前者的一种实现(另外的 ECMAScript 方言还有 JScript 和 ActionScript)。
所以可以概括为:
- ECMAScript:一种脚本语言的标准化规范,并不是某种具体的语言
- JavaScript:是对ECMAScript的实现和扩展
ECMAScript发展历程
名称 | 标准版本 | 发行时间 |
---|---|---|
ECMAScript2019(ES10) | 10 | 2019年6月 |
ECMAScript2018(ES9) | 9 | 2018年6月 |
ECMAScript2017(ES8) | 8 | 2017年6月 |
ECMAScript2016(ES7) | 7 | 2016年6月 |
ECMAScript2015(ES6) | 6 | 2015年6月 |
ECMAScript 5.1(ES5.1) | 5.1 | 2011年6月 |
ECMAScript5(ES5) | 5 | 2009年12月 |
ECMAScript4(ES4) | 4 | 被放弃 |
ECMAScript3(ES3) | 3 | 1999年12月 |
ECMAScript2(ES2) | 2 | 1998年6月 |
ECMAScript1(ES1) | 1 | 1997年6月 |
其中以ES2015(ES6)更新功能最多,主要包含:
- 对原有语法进行增强
- 解决原有语法上的一些问题或者缺陷
- 全新的对象、全新的方法、全新的功能
- 全新的数据类型和数据结构
更新功能
ES2019
1.Array新增实例方法:
- flat:按照指定的深度将一个数组扁平化,如果需要将数组完全拍扁变成一维数组,则指定为无限大,即是
Infinity
,相反如果不指定深度,其默认值是1。 - flatMap: 等于一个数组先调用完map函数再调用flat函数将其扁平化,扁平化的深度固定为1。
2.Object新增静态方法:
- fromEntries:将一个
iterable
对象返回的一系列键值对转换为一个对象
3.String新增实例方法:
- trimStart:
- trimEnd:
4.Symbol新增属性:
- description:只读属性,返回Symbol描述信息。
5.改进Array.prototype.sort
改进之后的sort方法是个稳定
的方法,即相同判断条件的项的次序不会改变。
6.改进Function.prototype.toString()
ES2019之前,调用function的toString方法会将方法体里面的空格字符省略掉,ES2019之后,要求一定要返回函数源代码(保留空格字符)或者一个标准的占位符,就是说打印的格式和源码格式是一样的,这样就更便于阅读。
ES2018
1.Promise新增实例方法:
- finally:无论resolved或是rejected都会调用这个回调。
2.异步迭代器
3.对象的rest/spead(剩余/展开)操作
4.正则表达式相关:
- s/dotAll:新增标志
s
用来表示 dotAll。以使.
可以匹配任意字符 - named capture group:给捕获到的匹配项命名
- lookbehind assertion:后行断言
- Unicode 转义:
详细介绍请见点击这里
ES2017
1.新增关键字async/await
2.Object新增3个静态方法:
- Object.values:获取对象所有属性的值组成的数组
- Object.entries:获取对象所有属性的数组,数组里的每一项就是属性的键值对
- Object.getOwnPropertyDescriptors:获取对象属性信息,可以用来复制出一个新对象。
3.String新增2个实例方法:
- padStart:如果字符串不够指定长度,会在
头部
以给定字符串补全 - padEnd:如果字符串不够指定长度,会在
尾部
以给定字符串补全
如果第二个参数不传,默认以空格补全
'1'.padStart(10, '0') // 0000000001
'12'.padStart(10, '0') // 0000000012
'123456'.padStart(10, '0') // 0000123456
'1'.padEnd(10) // 1abcabcabc
'12'.padEnd(10) // 12abcabcab
'123456'.padEnd(10) // 123456abca
4. 集合类型的字面量形式可以使用尾逗号
let a = [1, 2, 3, 4,]
let o = {'k1': 'v1',
'k2': 'v2',
}
ES2016
1.Array新增实例方法
- includes:判断数组是否包含给定的值
2.指数运算符 **
ES2015
1.let和const
2.箭头函数
3.函数参数设置默认值
4.class关键字声明类
5.Promise
6.Generator
7.模板字面量
8.对象字面量增强
9.结构分配
10.展开操作符
11.for...of循环
12.新增Map & Set数据类型
13.新增Proxy
14.模块化
附录:
一张图展示ES2016~ES2019更新点: