简述:

  ECMAScript 6 (ES6)引入了更多的编程模式,包括类,模块以及for()循环。
  ES7 主要特性是 Array.prototype.includes(),它用于确定给定项是否在包含在数组中。
  ES8 拓展了对对象字面量的支持,并可使用 async/await 来更易地编写异步代码。此外,还有一些新的功能,例如String#padStartObject#values 和 Object#entries 等。

深度解析:

      ECMAScript6

    在 2015 年发布的新一代 JavaScript 语言标准,包含了诸多新特性;

      主要包括箭头函数、块级作用域、Class声明、模板字符串、Promise对象、Iterators & Generators以及带有加载器的模块系统等特性。 其中,箭头函数使语法更加简洁灵活; Class声明将原型相关的代码进行了更彻底地封装; 模板字符串优化字符串操作;promise对象简化异步编程;Iterators&Generators应对复杂数据结构;模块系统为浏览器和服务端引入一种新的模块解决方案。 

  • 类和模块
  • Arrow Function
  • let 和 const
  • Iterators and Generators
  • Promises
  • Rest Parameters
  • Spread Operator
  • 新的字符串方法
  • 新的对象字面量方法
  • 模版字符串
  • 改进原型对象
  • Map Sets WeakSets Proxies
  • 常量
  • JavaScript Math对象
  • 数据结构之Set

ECMAScript7 :

  2016 年发布的新一代 JavaScript 语言标准,扩展了 ES6 及以前版本内容;

  • 拓展路径(Exponential Operator):允许我们将简单表达式乘方写成几个大写字母,从而更容易地处理大数据集;
  • Array.includes(): 允许我们在数组中搜索一个特定的值,如果要查找的特定值可以在数组中找到,则返回true。
  • 箭头函数:箭头函数使JS代码更简洁,避免了不必要的重复,它允许我们用更少的代码定义复杂的函数;
  • async/await: async / await是ECMAScript 6的一部分,可以有效地处理多个异步任务。

ES7的API增加了多种类型的新操作,例如:

  • Object.values():用于返回给定对象的所有值,它可以一次返回一个对象的所有值。
  • String.padStart()String.padEnd():用于在前端和尾部添加字符串中缺失的字符;
  • Math.clamp():若值小于最小值,则返回最小值;若大于最大值,则返回最大值;否则返回给定值。

此外,ES7新增了一个静态优化器,这意味着JS开发人员现在可以使用更高效、更快速的代码,这样可以提高页面加载时间,并降低客户端内存消耗。

ECMAScript8 :

  2017 年发布的新一代 JavaScript 语言标准,它扩展了 ES7 内容,也叫 ES2017,是ECMAScript 规范的下一个重要版本,它引入了很多新特性,如:

  • async/await:用来实现异步编程,支持回调函数,使异步代码更容易读写。
  • Object.values()Object.entries(): 以前只能用for/in循环去遍历对象,现在可以直接使用Object.values()Object.keys() 和Object.entries(),“访问器”方法用于访问对象中的属性会降低大量复杂度。
  • String.prototype.padStart()String.prototype.padEnd():可以用来进行字符串的填充
  • SharedArrayBuffer (SASB), Atomics:用来实现多线程中的同步问题,使用共享内存和 atomic 操作,在 Js 程序之间共享数据,控制执行顺序。
  • Object.getOwnPropertyDescriptors():
  • trailing commas:

ECMAScript9 

  也叫 ES2018,它引入了一些新的功能,包括:

  • Rest/Spread 属性:允许在对象和数组字面量中使用三个点来声明展开语法;
  • 模板字面量:用反引号 `` 把多行字符串括起来,可以隔开空格和换行;
  • Promise.finally ():允许执行和Promise无关的操作,无论函数resolve或者reject;
  • 箭头函数参数列表增强:允许不用指定参数列表中单个参数的括号,在列表中有多个参数就一定需要括号;
  • 新的全局方法:ES9新增了很多全局方法,包括 Object.fromEntries()、Array.flat() 和 Array.flatMap();
  • 伪数组对象的 Iterable :允许开发者使用 for...of 语句输出 HTMLCollection,NamedNodeMap 和 Arguments 对象等;
  • Async Iterators :定义了四种使用async/await语法遍历迭代器的方法:for await...of、AsyncGenerator、AsyncIterator 以及 AsyncIterator.prototype.throw();
  • Promise.finally():JavaScript Promise Contract 中的 Finally 方法,允许在最后执行一个操作,对 Promises 的处理更加简便。