一、新增箭头函数

  • 简化了写法, 少打代码,结构清晰
    - 明确了this。传统JS的this是在运行的时候确定的,而不是在定义的时候确定的;而箭头函数的this是在定义时就确定的,不能被改变,也不能被call,apply,bind这些方法修改。

二、块级作用域

  • ES6中的let、const声明的变量有块级作用域,let声明的变化没有提升的概念
    - ES5中是没有块级作用域的,并且var有变量提升的概念
    - let声明的变量在同一个作用域内只有一个
    - 要声明常量使用const

三、解构赋值

  1. ES6中变量的解构赋值,比如:
  2. let [a,b,c] = [0,1,2];
  3. let {foo:abc,bar} = {foo:'hello',bar:'hi'};

四、Symbol

ES6新增了一种Symbol数据类型,表示全局唯一的对象

let a1 = Symbol();
let a2 = Symbol();
console.log(a1 === a2);   //false   a1和a2永远不相等

let a3 = Symbol.for("a3");
let a4 = Symbol.for("a3");
console.log(a3 === a4);  //true

五、模板字符串

var name = "张三";
var age = 12;
var gender="男";

let str = `姓名${name},年龄${age},性别${gender}`;

六、展开运算符

let arr1 = [1,2,3];
let arr2 = [4,5,6];
let arr3 = [...arr1,...arr2];

七、类

ES6引入Class这个概念,让JS拥有其他面向对象语言的语法糖。

{
  // 继承传递参数
  class Parent{
    constructor(name='mukewang'){
      this.name=name;
    }
  }

  class Child extends Parent{
    constructor(name='child'){
      //先初始化父亲的信息,在初始化自己的信息  
      super(name);
      this.type='child';
    }
  }
  console.log('继承传递参数',new Child('hello'));
}

八、Promise

ES6的Promise主要用于解决JS回调地狱问题

var fs = require('fs')
function pReadFile(filePath) {
  return new Promise(function (resolve, reject) {
    fs.readFile(filePath, 'utf8', function (err, data) {
      if (err) {
        reject(err)
      } else {
        resolve(data)
      }
    })
  })
}
pReadFile('./data/a.txt')
  .then(function (data) {
    console.log(data)
    return pReadFile('./data/b.txt')
  })
  .then(function (data) {
    console.log(data)
    return pReadFile('./data/c.txt')
  })
  .then(function (data) {
    console.log(data)
  })

js中解决异步回调方案:
1.回调函数:回调地狱的问题
2.Promise
3.await和async  最优

九、ES6的迭代器

//for ... of 是ES6中新增加的语法,主要用来循环实现了Iterator接口类型的对象
//for ... of 可以遍历Array、Set、Map不能遍历Object 
let arr = ['China', 'America', 'Korea']
for (let o of arr) {
    console.log(o) //China, America, Korea
}

十、ES6模块化

//1.导出
//导出单个成员
export let name = 'leo';
export let age= 30;
let name= 'leo';
let age= 30;
let kk = "abc"
//导出多个成员
export {name, age};
//导出默认成员
export default kk;

//2.引入
import kk,{name,age} from 'a.js'