来源

Let 和 Const

var定义的变量没有块级作用域的概念。

ES6、ES7、ES8、ES9、ES10 - 图1

Class(类)

在es6之前,生成实例对象,写一个构造函数

  1. function Person(name, age) {
  2. this.name = name;
  3. this.age =age;
  4. }
  5. Person.prototype.information = function () {
  6. return 'My name is ' + this.name + ', I am ' + this.age;
  7. }

在es6之后:

  1. class Person {
  2. contructor(name, age) {
  3. this.name = name;
  4. this.age = age;
  5. }
  6. information() {
  7. return 'My name is ' + this.name + ', I am ' + this.age;
  8. }
  9. }

箭头函数(Arrow function)

箭头函数表达式的语法比函数表达式更简洁,并且没有自己的thisargumentssupernew.target。这些函数表达式更适用于那些本来需要匿名函数的地方,并且它们不能用作构造函数。

  1. var list = [1,2,3,4,5,6,7];
  2. var newList = list.map(function (item) {
  3. return item * item;
  4. })
  5. //在es6里面
  6. const list = [1,2,3,4,5,6,7];
  7. const newList = list.map(item => item * item);

函数参数默认值(Function parameter defaults)

模板字符串(Template string) ``

解构赋值(Destructuring assignment)

通过解构赋值, 可以将属性/值从对象/数组中取出,赋值给其他变量。

  1. let a = 10
  2. let b = 20
  3. [a, b] = [b, a] //交换两个变量的值

模块化(Module)

扩展操作符(Spread operator)

扩展操作符可以在函数调用/数组构造时, 将数组表达式或者string在语法层面展开;还可以在构造字面量对象时, 将对象表达式按key-value的方式展开。

Promise

Promise 是ES6提供的一种异步解决方案,比回调函数更加清晰明了。
三种状态:pending、resolved、reject

Symbol

原始数据类型,表示独一无二的值,用来定义对象的唯一属性名。

Map对象

Map 对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值。

更多详情来源
菜鸟教程ES6链接

ES7(ES2016)

Array.prototype.includes()
includes() 方法用来判断一个数组是否包含一个指定的值,根据情况,如果包含则返回 true,否则返回false。

  1. const array1 = [1, 2, 3]
  2. console.log(array1.includes(2)) // true
  3. const pets = ['cat', 'dog', 'bat']
  4. console.log(pets.includes('cat')) // true
  5. console.log(pets.includes('at')) // false

ES8(ES2017)

async/await
虽然Promise可以解决回调地狱的问题,但是链式调用太多,则会变成另一种形式的回调地狱 —— 面条地狱,所以在ES8里则出现了Promise的语法糖async/await,专门解决这个问题。

Object.values()
Object.values()方法返回一个给定对象自身的所有可枚举属性值的数组,值的顺序与使用for…in循环的顺序相同 ( 区别在于 for-in 循环枚举原型链中的属性 )。

Object.entries()
Object.entries()方法返回一个给定对象自身可枚举属性的键值对数组,其排列与使用 for…in 循环遍历该对象时返回的顺序一致(区别在于 for-in 循环还会枚举原型链中的属性)。

padStart()
padStart() 方法用另一个字符串填充当前字符串(重复,如果需要的话),以便产生的字符串达到给定的长度。填充从当前字符串的开始(左侧)应用的。

padEnd()
padEnd() 方法会用一个字符串填充当前字符串(如果需要的话则重复填充),返回填充后达到指定长度的字符串。从当前字符串的末尾(右侧)开始填充。

ES9(ES2018)

or await…of
for await...of 语句会在异步或者同步可迭代对象上创建一个迭代循环,包括 StringArrayArray-like 对象(比如arguments 或者NodeList),TypedArrayMapSet和自定义的异步或者同步可迭代对象。其会调用自定义迭代钩子,并为每个不同属性的值执行语句

对象扩展操作符
ES6中添加了数组的扩展操作符,让我们在操作数组时更加简便,美中不足的是并不支持对象扩展操作符,但是在ES9开始,这一功能也得到了支持。

ES10(ES2019)

or await…of
for await...of 语句会在异步或者同步可迭代对象上创建一个迭代循环,包括 StringArrayArray-like 对象(比如arguments 或者NodeList),TypedArrayMapSet和自定义的异步或者同步可迭代对象。其会调用自定义迭代钩子,并为每个不同属性的值执行语句

对象扩展操作符
ES6中添加了数组的扩展操作符,让我们在操作数组时更加简便,美中不足的是并不支持对象扩展操作符,但是在ES9开始,这一功能也得到了支持。