es6 特性复习1

变量:

 let ,let具有块级作用域,存在暂时性死区(在块级作用域let声明了一个变量,它所声明的变量就被绑定到当前这个区域,不受外部所影响),只有在它(let)声明的代码块中起作用:

for(var j = 0; j < 2 j++) {} console.log(j); // 2

for(let i  = 0; i < 3 i++) {} console.log(i); // 报错: i 未被定义

const, const用于声明一个常量,在一个常量被声明后,值是不可改变的:

const str=123;  // 声明一个常量

str=456;// TypeError: Assignment to constant variable.

 let,const都没有声明提升,只能在声明后使用,在一个块级作用域内,同一个变量不能被重复声明,在块级作用域外不能访问作用域内的变量

结构赋值:

对象结构:

let node = {

    type: "Identifier",

    name: "foo"

};  

// 使用结构分配不同的值

let { type, name } = node;

console.log(type); // "Identifier"

console.log(name); // "foo"

数组结构:

let colors = [ "red", "green", "blue" ];

let [ firstColor, secondColor ] = colors;   //从colors中分别结构出 red,green, 未显式声明的则会被忽略

console.log(firstColor); // "red"

console.log(secondColor); // "green"

// 也可以直接为自己所需要的元素声明变量

let colors = [ "red", "green", "blue" ];

let [ , , thirdColor ] = colors;

console.log(thirdColor); // "blue"

混合结构:

let node = {

    type: "Identifier",

    name: "foo",

    loc: {

        start: {

            line: 1,

            column: 1

        },

        end: {

            line: 1,

            column: 4

        }

    },

    range: [0, 3]

};

let {

    loc: { start },                                   // 分别将node.loc.start和node.range[0]提取到变量start和startlndex中 

    range: [ startIndex ]

} = node;

console.log(start.line); // 1 

console.log(start.column); // 1 

console.log(startIndex); // 0

解构模式中的loc和range仅代表它们在node对象中所处的位置(也就是该对象的属性)。当使用混合解构的语法时,则可以从node提取任意想要的信息                          

Promise:

 promise有三种状态:pending(等待,处理中)   -->  1.resolve(完成)   2.rejected(失败,拒绝)

Promise对象中的then方法:

 可以接收构造函数中处理的状态变化,then方法有2个参数,第一个函数接收resolved状态的执行,第二个参数接收reject状态的执行。

function fn(num) {

    returnnewPromise(function(resolve, reject) {

        if(typeofnum == 'number') {

            resolve();

        } else {

            reject();

        }

    }).then(function() {

        console.log('参数是一个number值');

    }, function() {

        console.log('参数不是一个number值');

    })

}

fn('hahha');

fn(1234);

then方法的执行结果也会返回一个Promise对象。因此我们可以进行then的链式执行

catch的用法:

getNumber()

.then(function(data){

    console.log('resolved');

    console.log(data);

})

.catch(function(reason){

    console.log('rejected');

    console.log(reason);

});

在执行resolve的回调(也就是上面then中的第一个参数)时,如果抛出异常了(代码出错了),那么并不会报错卡死js,而是会进到这个catch方法中

all的用法:

Promise的all方法提供了并行执行异步操作的能力,并且在所有异步操作执行完后才执行回调

Promise

.all([runAsync1(), runAsync2(), runAsync3()])

.then(function(results){

    console.log(results);

});

用Promise.all来执行,all接收一个数组参数,里面的值最终都算返回Promise对象。这样,三个异步操作的并行执行的,等到它们都执行完后才会进到then里面,all会把所有异步操作的结果放进一个数组中传给then,就是上面的results

你可能感兴趣的:(es6 特性复习1)