ES6 主要是为了解决 ES5 的先天不足,比如 JavaScript 里并没有类的概念,但是目前浏览器的 JavaScript 是 ES5 版本,大多数高版本的浏览器也支持 ES6,不过只实现了 ES6 的部分特性和功能。

一、新增箭头函数

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

    二、块级作用域

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

    三、解构赋值

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

    四、Symbol

    ES6新增了一种Symbol数据类型,表示全局唯一的对象
    1. let a1 = Symbol();
    2. let a2 = Symbol();
    3. console.log(a1 === a2); //false a1和a2永远不相等
    4. let a3 = Symbol.for("a3");
    5. let a4 = Symbol.for("a3");
    6. console.log(a3 === a4); //true

image.png

五、模板字符串

var name = "张三";
var age = 12;
var gender="男";
let str = `姓名${name},年龄${age},性别${gender}`;
console.log(str);

image.png

六、展开运算符

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

image.png

七、类

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'));

image.png

八、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)
  })

九、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
}

image.png

十、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’