zoukankan      html  css  js  c++  java
  • ECMA6--解构赋值

    什么是解构

    将函数拆解开

    1. 左右两边解构必须一样
    2. 右边必须是个东西
    3. 声明和赋值不能分开(必须在一句话里完成)

    应用场景

    • 数组
    • JSON
    let arr = [1,2,3]
    let [a,b,c] = [1,2,3]
    let {a,c,d} = {c:2,a:12,d:2}
    console.log(c,a,d);
    
    • 左边是数组右边也必须是数组(JSON)
    • JSON键值对形式传入
    let [{a,b},{c,d},n,s] = [{b:1,a:23},{c:23,d:12},1,'2'];
    console.log(a,b,c,d,n,s)
    alert([a,b,c,d,n,s])
    

    根据自己想要的粒度进行控制

    let [json,arr,n,s] = [{b:1,a:23},[24,2],1,'2'];
    console.log([json,arr,n,s])
    //(4) [{…}, Array(2), 1, "2"]
    

    [注]

    1. 数据格式不一致
    let [a,b] = {1,2}
    alert([a,b])
    
    1. 非法格式,JSON为键值对
    let {a,b} = {2,3}
    console.log(a,b);
    
    1. 声明和赋值不能分开,属于非法

    个人理解,程序是按照一定规则进行传输,如果你想写出没有BUG或者流畅的代码必须了解规则,这也是我们学习ECMA标准的一个必要理由

    let [a,b];
    [a,b] = [12,5]
    console.log([a,b]);
    

    【栗子】

    解构赋值:
    let {name,title,id} = obj

    • let name = obj.name;
    • let title = obj.title;
    • let id = obj.id;

    【注】解构赋值无法直接修改需通过 别名来进行修改 let{name:n,title,id}=obj;
    可以按需获取顺序是可以随便改变的,里面的值必须是一样的,之前声明后如果想重新赋值需通过 :别名 来存储
    如果console.log(name),undefined如果被解构赋值的时候,被打印会undefined
    如果里面结构赋值的时候没有值或不需要,需要为空(默认值)必须要有否则会保持

    结构参数的时候需要加上小括号

    看数据,注意格式否则会报错

    this.goodsList = data;
    let newList = [];
    data.map(({goodsName,discount,price,imgsUrl})=>{
        <!--转换格式 
        let imgSrc = JSON.PARSE(imgsUrl)[0];
        -->
        <!-- 解构前
        let obj = {
            goddsName : goods.goodsName,
            imgSrc : '',
            price : goods.price
        -->
        <!-- 解构后 -->
        let obj = {
            goddsName,
            imgSrc,
            price
        }
    })
    

    价格转换:保留小数点后两位

    let abc = abc.toFixed(2);

    解构赋值:Destructuring

    ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)。
    数组的解构赋值:按照对应的顺序解构。

    【Dome1】
    var arr = [1,2,3];
    var [a,b,c] = arr;
    console.log(a,b,c)//可以解析出1,2,3,相当于a,b,c的值都已经赋上,只要结构对应没有问题
    【Dome2】
    var obj = {
        foo:function(){
        },
        o:{
        },
        arr:[],
        str:'abc'
    }
    var {foo,arr,str,o} = obj; //并没有按照原有obj的顺序,但是同样可以赋值,只要对象中的Key的名字能对应找到即可
    console.log(foo,arr,str,o);
    //如果var {foo1,arr} = obj;因为原来obj中没有foo1这个键,会出现undefined,所以如果要对对象解构赋值,需要和原对象的Key名称一致,顺序无所谓
    【Dome3】
    //还可以做值的交换,原来要用到中间临时变量,但是现在可以这么做
    var y = 1;
    var x = 2;
    var [x,y] = [y,x];
    console.log(x,y); //这里x和y的值已经交换了
    
  • 相关阅读:
    iptables之NAT端口转发设置
    Windows server 2008 R2远程桌面3389端口号修改
    Nginx启动错误:error while loading shared libraries: libpcre.so.1
    sp_change_users_login 'Update_One', '用户名', '登录名';
    Sqlserver 数据库定时自动备份
    ES DSL 基础查询语法学习笔记
    kafka命令使用
    kafka集群中常见错误的解决方法:kafka.common.KafkaException: Should not set log end offset on partition
    快速排序法(双冒泡排序法)
    运算符
  • 原文地址:https://www.cnblogs.com/LingXiangLi/p/10252671.html
Copyright © 2011-2022 走看看