首页 > 其他分享 >ES6-对象的解构赋值

ES6-对象的解构赋值

时间:2023-01-09 14:24:31浏览次数:36  
标签:ES6 const 属性 age sex 解构 赋值

一.概念:结构匹配,属性相同的完成属性值赋值,不论属性的书写顺序

const {sex: b age: a} = { age: 18, sex: '男' };
        console.log(a, b);//18 '男'
//---------------------------------------------
const { age: age, sex: sex } = { age: 18, sex: '男' };//属性名和常量名可以一样,因为属性名默认是字符串类型的,符合标识符命名规范就可以省略''         console.log(age, sex);//18 '男' //属性名和变量、常量名一样,上面的可以简写为以下: const { age, sex } = { age: 18, sex: '男' };
 

 二.注意事项

1.默认值

①生效条件:对应的属性值===undefined

②如果解构赋值右边对象没有这个属性,那么就相当于undefined;const{age,sex}={};此时打印age和sex都是undefined;

③简写形式(属性名和变量常量名一样)的默认值语法

const { age='未知', sex='未知' } = { age: 18, sex: '男' };
        //const { age: age='未知', sex: sex='未知' } = { age: 18, sex: '男' };//和上面等价

③默认值是表达式惰性求值,这点和数组解构赋值相同

2.将已经声明的变量用于解构赋值,赋值过程需要在圆括号中进行

 let a = 1;
        {a}={a:1};//报错,因为浏览器认为{}是代码块
//---------正确写法-----------
let a = 1;
        ({ a } = { a: 1 });
//----------------------
let { a } = { a: 1 };//前面有let时是没问题的
//---------------------
 let a = 1;
[a] = [1];//数组解构赋值这样写,没问题不报错

3.可以取到继承的属性(其原型链上原型的属性、方法)

打印Object.prototype

 

 

 

 

 

 字面量创建的对象本质也是new Object()出来的;

const { toString } = {};
        console.log(Object.prototype);
        console.log(toString);//ƒ toString()

三.应用

1.函数参数的解构赋值

const fn = ({ a=0, b=0 }) => {//参数括号不能省略,会报错
            console.log(a, b);//1,2
        }
        fn({ a: 1, b: 2 });

2.复杂的嵌套

 const obj = {
            x: 1,
            y: [2, 3, 4],
            z: {
                a: 5,
                b: 6
            }
        };
        const {
            y: y,
            y: [, , yy],
            z: z,
            z: {
                a: a,
                b: b
            }
        } = obj;
        // 属性值相同的进行属性值赋值y=[2, 3, 4] 、[, , yy]= [2, 3, 4]、z= { a: 5, b: 6 }、{a:a,b:b}={a:5,b:6}
        //[, , yy]= [2, 3, 4]、{a:a,b:b}={a:5,b:6}又构成了解构赋值,yy ,a ,b 也是const声明的;

注意:解构赋值左边,同一属性名可以写多次(比如这里的y,z),不影响匹配赋值;

 

标签:ES6,const,属性,age,sex,解构,赋值
From: https://www.cnblogs.com/zhoushangquan/p/17036698.html

相关文章