数组-对象-函数参数解构

数组对象解构

一个正在努力爱好运动的程序猿-
座右铭:越努力越幸运,越运动越健康,热爱编程,热爱运动。



前言

允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构

解构是ES6的新特性, 比ES5代码简洁,清晰,减少代码量


一、数组解构

     //数组解构(按顺序匹配)
    //匹配模式 左边是变量 =(匹配) 右边对应的值
    let [a,b,c] =[1,2,3];
    var a = 1;
    var b = 2;
    var c = 3;

    var a = [1,2,3];
    var b = {id:2};
    var c = null;

    let [a,b,c] = [[1,2,3],{id:2},null];

    //匹配不成功   变量的值就等于undefined
    let [a,b] = [1] //a=1  b = undefined

    let [a,b] = [1,2,3]  //不完全解构  a=1 b=2 按顺序匹配

    //扩展
    let [a] = []; //a =undefined
    let [a,b] = [[{id:i},{id:2}],null]; //a = [{id:i},{id:2}] b=null
    let [a,[b],c] = [1,[2],3];

    //默认值 (成员等于undefined 默认值会生效)
    var arr = [10,20];
    let [a=1,b=1] = arr;
    a = arr[0] || 1;
    b = arr[1] || 1;

    let [a=1,b=2] = [10];    //a=10,b = 2;

    let [a=1,b=2] = [10,null];  //a = 10;b = null

    let [a,b=2] = [10];   //a=10,b = 2;
    //例外  成员等于undefined 默认值会生效
    let [a,b=2] = [10,undefined];  //a=10,b=2

二、对象解构

//对象解构(按匹配模式来匹配)
    var {a,b,c} = {a:1,b:2,c:3};
    var obj = {
        a:1,
        b:2,
        c:3
    };
    var a = obj.a;
    var b = obj.b;
    var c = obj.c;
   // var {a,b,c} = obj;

    //作用 例如后端传过来的数据...
    var res = {
        code:200,
        msg:'success',
        result:[1,2,3,4],
        obj:{id:1},
        arr:[{name:1}]
    };
    var code = res.code;
    var result = res.result;
    var obj = res.obj;
    let {code,obj,result} = obj;
    result[2];
    obj.id;

    //扩展题
    function fun(str,res){
        let {code,arr} = res;
        console.log(code)
    };
    fun(1,res) //res为上面的整个对象

    function fun(str,{code,obj}){
        console.log(code)
    };
    fun(1,res)


    //全局引入的变量与组件中的变量重名
    //别名   a:q  a是匹配模式  q才是变量
    var {a:q,b,c} = {a:1,b:2,c:3};

    var {a:a2,b:b2,c:c} = {a:1,b:2,c:3};
    console.log(a2)
    console.log(b2);

    let {a,b:y} = {a:1,y:2};
    //变量是谁  a y 
    //匹配结果 a = 1 , y  = undefined

    //默认值 默认值生效的条件是,对象的属性值严格等于`undefined`
    let {x=3} = {x:10};  //x =10;
    let {x,y = 10} ={x:10}; //x = 10,y=10
    let {x=1,y = 10} ={x:undefined}; //x=1,y = 10

    let {x:n = 1,y:a = 2} = {x:10,y:20};
    //变量 n a
    //匹配结果  n = 10,a = 20;

    let {x:n = 1,y:a = 2} = {x:10,y:undefined}; //n=10,a=2;

三、函数参数解构

 //数组解构
    function add([x, y]){
      return x + y;
    }
    add([1, 2]);   //匹配方式 [x,y] = [1,2];  
   
    
   //对象解构
    function move({x, y}) {
      return x +y;
    }
    move({x: 3, y: 8}); //匹配方式 {x, y} = {x: 3, y: 8};

    //当实参为空时,写入默认值
    function fun([x=0,y=0]) {
            return x+y;
    }; 
    fun([2,4]);//匹配方式 [x=0,y=0] = [2,4];
 
    function move({x = 0, y = 0}) {
        return x +y;
    }
    move({x: 3, y: 5});   //匹配方式 {x = 0, y = 0} = {x: 3, y: 5};

    //扩展题  函数参数的解构也可以使用默认值
    function move({x = 0, y = 0} = {}) {   
            return [x, y];
    }
    move({x: 3, y: 8});   // [3,8]
    //匹配方式 {x = 0, y = 0} = {x: 3, y: 8}
    move({x: 3});    //[3,0]
    //匹配方式 {x = 0, y = 0} = {x: 3}
    move({});   //[0,0]
    //匹配方式 {x = 0, y = 0} = {}
    move();   //[0,0]
    //匹配方式 {x = 0, y = 0} = {}


    function move({x, y} = { x: 0, y: 0 }) {   
            return [x, y];
    }
    move({x: 3, y: 8});  // [3,8]
    //匹配方式 {x, y} = {x: 3, y: 8}
    move({x: 3});   //[3,undefined]
    //匹配方式 {x, y} = {x: 3}
    move({});   //[undefined,undefined]
    //匹配方式 {x, y} = {}
    move();   //[0,0]
     //匹配方式 {x, y} = { x: 0, y: 0 }

总结

越努力越幸运,越运动越健康!!!加油

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值