什么是ES6 ?
es6的全名是ECMAscript 2015
Es6有哪些新特性?
一、let
1. 没有变量提升
 console.log(a);
    let a = 4;
    // a is not defined
2. 不能重复申明
 let a = 4;
    let a = 5;
    console.log(a);
    // Identifier 'a' has already been declared
3. 临时失效区(暂时性死区)
var a = 5;
    function fn(){
        console.log(a);
        let a = 4;
    }
    fn();
    // a is not defined
二、const
在Es6之前,如果我们想定义常量,通常由程序员自己约定
var NUM = 100;
将所有字母都大写的变量约定为常量,但本质还是变量
let 和 const 声明的变量不挂在window上
三、class 类
在Es6之前,我们要定义一个类,只能通过function来模拟
 function Person(){
        this.name = 'xxx';
    }
    Person.prototype.say = function(){
    }
    var person = new Person();
1.语法
class Person{
        constructor(name){
            this.name = name;
        }
        say() {
            console.log(this.name);
        }
    }
    var person = new Person();
    person.say();
四、Set 集合
Set是一个不能有重复元素的集合,重复添加无效
var s = new Set();
    s.add(1);
    s.add(2);
    // s.delete(2)  删除
    // s.clear() 清空
    // s.size() 长度
1.遍历Set
var keys = s.keys(); // 返回一个迭代器
    for(var k of keys){
        console.log(k);
    }
    var values = s.values();
    for(var v of values){
        console.log(v);
    }
    var entries = s.entries(); // 将key和value 组合成一个数组返回
    for(var e of entries){
        console.log(e);
    }
如果我们想在Es6之前使用给数组去重
2.Array数组去重问题
方法一:
var arr = [1,2,3,4,1,1,1];
    function fn(arr){
        var map = {};
        var newArr = arr.filter(function(item, index){
            if(!map[item]){
                map[item] = true;
                return item;
            }
        });
        return newArr;
    }
    fn(arr);
方法二:
var arr = [1,2,3,4,1,1,1];
    function fn(arr){
        var newArr = [];
        for(var i = 0; i < arr.length; i++){
            if(newArr.indexOf(arr[i]) === -1){
                newArr.push(arr[i]);
            }
        }
        return newArr;
    }
    fn(arr);
 
                            