es6解构赋值

解构赋值语法是一个 Javascript 表达式,这使得可以将值从数组或属性从对象提取到不同的变量中。

数组解构赋值:

{
    let a,b,rest;
    [a,b]=[1,2];
    console.log(a,b);    //1 2 

}
{
    let a,b,rest;
    [a,b,...rest]=[1,2,3,4,5];   
    console.log(a,b,rest);     //1 2 [ 3, 4, 5 ]

}
{
    let a,b;
    ({a,b}={a:1,b:2})
    console.log(a,b);    //1 2 
}
{
    let a,b,rest;
    [a,b,c=3]=[1,2];
    console.log(a,b,c);    //1 2 3
}
    let a,b,rest;
    [a,b,c]=[1,2];
    console.log(a,b,c);    //1 2 undefined
}

数组解构赋值的应用

//变量交换
{
    let a=1,b=2;
    [a,b]=[b,a];
    console.log(a,b);  //2 1
}
//分别取多个返回值很方便
{
    function f(){
        return[1,2]
    }
    let a,b;
    [a,b]=f();
    console.log(a,b);     // 1 2 
}
//选择性的接受需要的值
{
    function f(){
        return[1,2,3,4,5]
    }
    let a,b;
    [a,,,b]=f();
    console.log(a,b);     // 1 4 
}
//不知函数返回值的长度,只想取得想要的值
{
    function f(){
        return[1,2,3,4,5]
    }
    let a,b;
    [a,...b]=f();
    console.log(a,b);     // 1 [2,3,4,5] 
}
{
    function f(){
        return[1,2,3,4,5]
    }
    let a,b;
    [a,,...b]=f();
    console.log(a,b);     // 1 [3,4,5] 
}

对象的解构赋值

{
    let obj={
        a:2,
        b:true
    }
    let {a,b}=obj;
    console.log(a,b); //2 true
}
{
//对象
    const people = {
        name: 'lux',
        age: 20
    }
    const {age,name} = people   
//必须为name,age,即原属性名;其顺序可以改变,相应的值不变
    console.log(`${name} --- ${age}`)
// lux --- 20
}
{
    let obj={
        a:2,
        b:true
    }
    let {c,d}=obj;
    console.log(c,d); //undefined undefined
}
{
    let {a=3,b=5}={a:4}
    console.log(a,b); //4 5
}
{
    let {a:c,b:d}={a:4,b:5}
    console.log(c,d); //4 5
}

对象解构赋值的应用

{
    let metaData={
        title:'abc',
        test:[{
            title:'test',
            desc:'description'
        }]
    }
    let {title:esTitle,test:[{title:cnTitle}]}=metaData; //test:[{title:cnTitle}]必须和原来的形式一模一样
    console.log(esTitle,cnTitle);     //abc test
}
//错误应用
{
    let metaData={
        title:'abc',
        test:[{
            title:'test',
            desc:'description'
        }]
    }
    let {title,test:[{titl}]}=metaData;
     console.log(title,test:[{titl}]);     //报错test:[{titl}])
 }

 

//可以是
{
            let metaData = {
                title: 'abc',
                test: [{
                    title: 'test',
                    desc: 'description'
                }]
            }
            let {
                title: atitle,
                test: btitle
            } = metaData;
            console.log(btitle,atitle);  //[{title: 'test', desc: 'description' }]   'abc'
}

 

posted @ 2018-05-30 10:48  sunmarvell  阅读(140)  评论(0编辑  收藏  举报