一、let关键字特点:

1.存在块级作用域,
2.不能重复声明,
3.不会预处理,不存在变量提升,
应用:循环遍历使用let代替var是趋势,建议大家使用let。

二、const关键字特点:

1.定义常量,不允许修改,
2.其他等同与let,
应用:习惯保存不用改变的数据。

三、解构赋值特点:

1.对象的解构赋值:let {a,b} = {a: xxx,b: xxx}(依据对象key,ab要对应),
2.数组的解构赋值:let [a,b,c] = [1,2,3,4](依据对应的下标),
应用:习惯传参数的时候比较好用,或读取JSON对象。

四、模版字符串:(简化字符串拼接)

1.let index = 456,
2.let str = `xxxxxxxx${index}xxxx`,
输出结果:xxxxxxxx456xxxx。

五、简化对象写法:

let name = "xx" , age = 10;
1.let obj = { //原始
    name: name,
    age: age,
    setName: function(name){
        this.name = name;
    }
}
2.let obj = { //简化
    name,
    age,
    setName(name){
        this.name = name;
    }
}
注意:省略同名属性,省略函数的function。

六、点点点运算符(…)

1.可取代arguments(伪数组不可使用数组的一般方法比如),比arguments更灵活,作为形参只能写在最后,
function xxx(...value){
    cc.log(value);
}
xxx("kebi","nihao",42);//输出["kebi","nihao",42]真数组。
2.扩展运算符
let arr1 = [1,2,5];
cc.log(...arr1);  //输出1 2 5相当于遍历了一下数组;但不允许在对象使用

七、形参数默认值

1.不多说,很多语言都有都一样。

八、箭头函数()=>{}:

1.形参数部分 - 不建议大家省略小括号,不直观。
2.函数体部分 - 也不建议省略(如果省略,将自动返回当前语句或表达式的结果,如果不省略且不指定返回值默认返回undefined)。
3.最重要的部分 没有自己的this,和常规函数相反this是定义时候决定的不是调用的时候决定的,外层函数的this就是箭头函数内部的this。
4.可以配合call apply bind 箭头函数去理解this的指向问题 不难。

九、Symbol(ES6新增类型)

1.回顾都有哪些类型typeof返回7种:string,number,boolean,undefined,object,function,symbol。
2.创建symbol类型数据时的参数只是作为标识使用,所以 Symbol()也是可以的。
3.除了定义自己使用的Symbol值以外,ES6还提供了大概11个内置的Symbol值指向语言内部使用的方法。
  比如:Symbol.iterator;Symbol.for()等。
注意:Symbol属性是唯一的解决命名冲突,不能与其他数据进行计算包括字符串拼接;for in、for of不会遍历symbol属性
这里说一下iterator是一种接口机制(for...of的运行原理)为各种不同的数据解构提供统一的访问机制。
作用:1.为各种数据结构提供一个统一的、渐变的访问接口。
     2.使数据结构的成员能够按照某种次序排列。
     3.ES6创建了一种新的遍历命令for...of循环,iterator接口只要提供for...of消费。 
原理:1.创建一个指针对象指向数据结构的起始位置。
     2.第一次调用next方法,指针会指向数据结构第一个成员。
     3.再次调用next方法,指针自动往后移动直到指向最后一位成员。
     4.每次调用next方法会返回一个对象{value,done}对象
       *value代表当前指针指向的数据结构成员值,遍历结束值为undefined
       *done代表bool类型遍历结束后返回true,否则是false(引擎框架检测用)
原生具备iterator的数据结构类型:
    Array/arguments/set(容器)/map(容器)/String
补充:三点运算...符也用的该接口,另外大家可以了解一下Object中的方法比如Object.keys(obj)//返回包含obj对象key值的数组
同样我们可以按照底层原理修改让自己的对象实现for...of遍历

十、Promisse对象

1.通常解决异步操作问题(异步操作以同步的流程表现出来,避免层层嵌套回调函数(俗称回调地狱)),
2.Promisse是一个构造函数,实例是promisse,
3.基本语法介绍promise对象的3种状态: pending:代表初始化状态 fullfilled:成功状态 rejected:失败状态
let promise = new Promise((resolve, reject)=>{
    //1.自动初始化promise状态为pending
    //2.执行异步任务(比如开启定时器和发送前后端请求)
    setTimeout(()=>{
        //3.根据异步任务结果修改promise状态
        //成功(也可以传递参数let msg = "OK")
        resolve(msg);//作用就是修改promise状态为成功-->fullfilled
        //失败
        reject();作用就是修改promise状态为成功-->rejected
    },2000);
});
//4.修改成功和失败状态后会自动调用第一个和第二个回调(使用默认方法then)
promise
    .then((msg)=>{
        cc.log("成功了",msg)
    },()=>{
    cc.log("失败了")
    })//可以多次调用
    .then((msg)=>{
        cc.log("成功了",msg)
    },()=>{
    cc.log("失败了")
    });

十一、Generator(过度的一个概念慢慢淘汰了,不建议大家在花大时间去学习了解)

1.ES6提供解决异步变成的方案之一。
2.该函数内部封装不同状态的数据,用来生成遍历器对象。
3.可暂停函数yield用来暂停,next方法用来启动;每次返回的是yield后面表达式的结果。
尝试使用一下处理异步问题,和promise一样都比较啰嗦,回掉比较多的时候看代码也很麻烦。

function asyncUtil(){
    setTimeout(()=>{
        cc.log("执行异步任务");
        let msg = "OK";
        Gu.next(msg)
    },2000);
}
function * generatorUtil(){
    cc.log("函数开始执行1")
    let xx = yield asyncUtil();//遇到yield暂停,并且具备返回值,进行传递参数 (OK)
    cc.log(xx);
    cc.log("函数开始执行2")
    yield asyncUtil();
    cc.log("函数开始执行3")
}

let Gu = generatorUtil();
Gu.next();//调用后才执行generatorUtil()
执行结果:
1.函数开始执行1
2.OK
3.执行异步任务
4.函数开始执行2
5.函数开始执行3

十二、async函数(ES7的内容因为用的比较多所以我们放到一起来学习,结合了Promisse和Generator)

概念:真正意义上解决异步回调问题,同步流程表达异步操作。
本质:Generator的语法糖。
语法:
async function foo(){
    await  异步操作;
    await  异步操作;
}
特点:
1.不需要像Generator去调用next方法,遇到await等待(暂停),当前异步执行完成就往下执行。
2.反回的总是Promis对象,可以用then方法进行下一步操作
3.语法更明确简单,使用过程中目前没有感觉有副作用。
尝试一下下经常结合Promisse使用:
function promiseUtil(){
    return new Promise((resolve, reject)=>{
        setTimeout(()=>{
            cc.log("执行异步操作");
            let msg = "数据"
            resolve(msg);//可进行参数传递。
        },2000);
    })
}

async function asyncUtil(){
    cc.log("函数开始执行1");
    let data = await promiseUtil();//等待异步操作。
    cc.log(data);
    await promiseUtil();
}
asyncUtil();
//输出结果:
1.函数开始执行1
2.执行异步操作
3.数据
4.执行异步操作

十三、class

1.了解构造,一般方法,静态方法;继承。
这里不多说,了解这些前最好明白js的原型继承,因为这些底层都是依靠ji原型链实现的。

十三、模块