0
点赞
收藏
分享

微信扫一扫

数组和对象的解构赋值

进击的铁雾 2022-03-31 阅读 95
javascript

数组的解构赋值

解构匹配,索引值相同

    <script>
        let a =[11,122,33];
       const [ b,c,d ]=[11,122,33];
        console.log(b,c,d);
    </script>

默认值的基本用法

右边没有需要被解构的值,那么左边的值仍是原来默认的值

    // 默认值的基本用法
     const [a=1,b=2]=[];
  console.log(a,b)//1,2

默认值生效的条件

当需要解构的值未undefined的时候


        // 默认值生效的条件,其中一个是是Undefined
        // 默认值失效
        const [a=1,b=2]=[3,4];
          console.log(a,b)//3,4
           // 默认值失效
         const [a=1,b=2]=[3,null];
              console.log(a,b)//3 null
            // 默认值生效
               const [a=1,b=2]=[3];
              console.log(a,b)//3 2

当需要解构的值存在的时候,原来的值中如果有函数可以不执行,但是如果需要结构的值不存在,那么原来的值中的函数会执行。

   //   当需要解构的值是函数的时候
            const fun=()=>{
                console.log("执行");
                return 2;

            };
            const [x=fun()]=[];
            console.log(x);

常见的数组类解构

arguments和数组解构的应用

    <script>
        // arguments
        function fun(){
            console.log(arguments)
        //    arguments是类数组,不具备数组的方法
            console.log(arguments.push);//undefined
             // arguments的输入也可以解构
            const [a,b]=arguments;
            console.log(a,b);//1,2
        }
        // fun();//Arguments(0)
        fun(1,2);//Arguments(2)0: 1,1: 2

        var b =[11,22];
        console.log(b.push)//ƒ push() { [native code] }
    </script>

 DOM节点 document.querySelectorAll

<p>123</p>
    <p>32645</p>
    <p>456</p>
    <script>
        const op= document.querySelectorAll("p");
        // console.log(op);//NodeList(3) [p, p, p]
        const [p1,p2,p3]=op;
        console.log(p1,p2,p3);//<p>123</p>  <p>32645</p>    <p>456</p>
    </script>

数组解构作为函数的参数


    <script>
        const sum = ([x,y])=>x+y;
       console.log(sum([1,1])) ;//2
    </script>

两个变量交换值

  <script>
   let a=1;
    let b=2;
    [a,b]=[b,a];
    console.log(a,b);//2,1
    </script>

对象的解构赋值

    <script>
        // 是根据属性名作为桥梁,但是赋值给的是属性名的变量
        // v:k,属性名:属性值
        // const {name,age}   =  {name:"xiaoming",age:18}
        // console.log(name,age);//xiaoming 18
        // 完整的对象解构
        // const {name:name,age:age}   =  {name:"xiaoming",age:18}
        // console.log(name,age);//xiaoming 18
        // 可以改变变量的属性值的变量名称
        const {name:name1,age:age1}   =  {name:"xiaoming",age:18}
        console.log(name1,age1);//xiaoming 18
    </script>
    

对象解构赋值的注意事项

对象解构赋值的默认值

    //  对象解构的变量没有数组的时候,对应的变量为默认值
        const {name="xiaohong",age=0}  = {name:"xiaoming"};
        console.log(name,age);//xiaoming 0

对象解构赋值的惰性赋值

变量let在对象解构赋值前已经变量声明,需要整体添加()

因为如果直接写{age}会被人为代码块

常量的话,是直接重新赋值,错误。

 // 一个已经声明的变量let,不管是否立即赋值,在对象解构赋值的时候,前面不要再声明,同时用圆括号整体框住
        let age=13;
        ({age}={age:12});
         console.log(age);
  

可以获得继承的属性?

应用

对象的解构赋值作为函数的参数

    <script>
        // 不使用对象解构赋值的方法,参数是对象,函数体内需要打点调用
        const user=(a)=>{
            console.log(a.name,a.age)
        }
        user({name:"xiaoming",age:12});

        //使用解构赋值,形参和实参对应,函数体不需要打点调用
        const a=({name,age})=>{
            console.log(name,age)
        }
        a({name:"xiaoming",age:12});
    </script>

嵌套

   <script>
        const a={
            name:"xiaoming",
            age :[12,13],
            friend:{
                name:"xiaohong",
                age:14
            }

        }

     
        const {name,age,friend}=a;
        console.log(name,age ,friend);

    // 获得小明的年龄
        const {age:[xiaoming_age]}=a;
        console.log(xiaoming_age);
           // 获得小红的年龄
        const{friend:{age:xiaohong_age}}=a;
        console.log(xiaohong_age);
    </script>

 字符串的解构赋值

可以通过数组或者对象的方式解构赋值。

    <script>
        const [a,b]="hello";
        // console.log(a,b);//h e
        const {0:c}="world";
        console.log(c);//w
    </script>

数字,布尔可以通过对象解构赋值,undefined和null不可以解构赋值

举报

相关推荐

0 条评论