1. Default Parameters(默认参数) ES6中可以直接讲默认值放在函数申明这一步中
// ES6以前写法
var func = function(color) {
    var color = color || 'pink'
} 

// 默认参数申明写法
var func = function(color='pink') {
     // do something
}
  1. Template Literals(模板对象) 使用反引号 ${} 包裹普通字符串和使用 ${} 包裹变量拼接
var a = `字符串和 ${动态数据} 进行拼接`
  1. Multi-line Strings (多行字符串)字符串超长的情况下换行需要 + 号拼接,使用多行字符串只需要使用两个反引号包裹即可换行
  2. Destructuring Assignment (解构赋值)
// 从对象中取出元素
var { name, age } = res.data
// 从数组中取出元素
// 嵌套数组结构
let[a,b,[c,d],e] = [1,2,[3,4],5];
console.log(c,d);//3,4
// 默认值,有匹配值的取匹配值,没有匹配值的取默认值
let[a,b,c,d='44'] = [1,2,3];
console.log(d);//44
let[a,b,c,d='44'] = [1,2,3,5];
console.log(d);//5
// 字符串解构
// ES5:
var res = "你好呀";
console.log(res[2]);//呀
//ES6
let[a,b,c] = "你好呀";
console.log(b);//好
  1. 箭头函数
    箭头函数是匿名函数,不能作为构造函数,不可以使用new命令,否则会抛出一个错误。所以箭头函数也不具有new.target。
    箭头函数的 this 永远指向其上下文的 this ,任何方法都改变不了其指向,如 call() , bind() , apply() ,可以说正是因为没有自己的this,才使其具备了以上介绍的大部分特点;
    普通函数的this指向调用它的那个对象

  2. Promise
    Promise本身是一个状态机,每一个Promise实例只能有三个状态,pending、fulfilled、reject,状态之间的转化只能是pending->fulfilled、pending->reject,状态变化不可逆。
    Promise有一个then方法,该方法可以被调用多次,并且返回一个Promise对象(返回新的Promise还是老的Promise对象,规范没有提)。
    支持链式调用。
    内部保存有一个value值,用来保存上次执行的结果值,如果报错,则保存的是异常信息。

  3. Block-Scoped Constructs Let and Const(块作用域和构造 let 和 const)

  4. Class 类

  5. Modules (模块)
    ES6之前 javascript 并不支持本地的模块,通过使用AMD,RequireJS,CommonJS等方式解决,ES6中可以用 import 导入和 export 导出操作类

  6. Generators (生成器)

  7. New data structures like Map and Set(新的数据构造对像 MAP 和 set)

  8. Symbols 符号

  9. 默认参数不定参数扩展运算符

  10. 二进制和八进制数据类型