对象的解构赋值

一、属性和方法的简写

1.属性和方法的简写:当属性名和变量名一致时,可以简写,不一致则不能简写

        let x = 1;
        let name = "xiaoming"
        let obj = {
            // x:x
            x,//属性和方法的简写:当属性名和变量名一致时,可以简写
            // 不一致则不能简写
            name: "xiaoming"
        };

二、对象的解构赋值

        对象的解构赋值:按照属性名去进行匹配,不用计较顺序

        匹配模式:变量

        let { a, b } = { a: 1, b: 2 }
        console.log({ a, b });

        let { a1, a2 } = { a2: 22, a1: 11 }
        console.log({ a1, a2 });

        let { b1: b2, b2: b1 } = { b1: 1, b2: 2 }
        console.log(b2, b1);// 1 2

        1.对象的不完全解构 没有的值还是为undefined

        let { z1: z2, z3: z4 } = { z1: 2, z4: 6 };
        console.log(z2, z4);//1 undefined

        2.对对象的解构赋值可以取到继承的属性(原型链上的属性)

        let obj1 = {
            b2: 1
        }
        obj1.__proto__ = {
            b3: 2
        }
        let { b3 } = obj1;
        console.log(b3);
        

        3.使用解构得到的方法,只是全局的函数,不是对象的方法

        let obj1 = {
            b2: 1
        }
        obj1.__proto__ = {
            b3: 2
        }
        let { b3 } = obj1;
        
        // 使用解构得到的方法,只是全局的函数,不是对象的方法
        let { toString: toString1 } = obj1;
        console.log(toString1);//tostring1只是tostring这个方法 
        //ƒ toString() { [native code] }  
        // obj1.toString1();//报错
        toString1();

        4.可以嵌套

        let obj2 = {
            p: [
                'Hello',
                { y11: 'World' }
            ]
        };
        let { p, p: [x11, { y11 }] } = obj2;
        console.log(p, x11, y11);

        // 可以嵌套
        const node = {
            loc: {
                start: {
                    line: 1,
                    column: 5
                }
            }
        };
        let { loc, loc: { start }, loc: { start: { line } } } = node;
        console.log(loc, start, line);

三、默认值的设置

1.对象的解构赋值也可以触发默认值:严格等于undefined(===undefined),赋值为null也不行

        

        let { s1 = 0 } = { s2: 1 };//0是s1变量的默认值 当s1变量的值是undefined的时候,就触发默认值
        console.log(s1);//0
        // 完整写法:
        let { s2: s3 = 0 } = { s2: 3 }

        let { s3: s4 = s5, s4: s5 } = { s3: 1 }
        console.log(s4, s5);// 1 undefined    惰性求值,没有触发s4=s5 所以不会报错  
        // let {s3:s4=s5,s4:s5}={s4:1};//找不到s3,触发默认值,这时候s5使用在暂时性死区中,报错

2.对象解构时.右侧是数组也是可以解构的,用对象的属性名匹配数组的下标

        let { 0: p1, 1: p2, p3 } = [1, 2, 3];
        console.log(p1, p2, p3);//1  2  undefined

        let arr = [1, 2, 3];
        let { 0: first, [arr.length - 1]: last } = arr;
        console.log(first,last);//1 3

        // 对象的属性名 可以是字符串\可以是数字\可以是表达式\可以是变量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值