ECMAScript新特性

关于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)更新功能最多,主要包含:

  • 对原有语法进行增强
  • 解决原有语法上的一些问题或者缺陷
  • 全新的对象、全新的方法、全新的功能
  • 全新的数据类型和数据结构

关于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更新点:


QQxrT01m.png

你可能感兴趣的:(ECMAScript新特性)