• ES6-个人学习笔记二--解构赋值


    第二期,解构赋值如果能够熟练应用确实是个十分方便的功能,但是过分的依赖和嵌套只会让代码理解和维护起来十分困难,是个体现高逼格的表达式呢~

    1,解构赋值的基础

    //定义:es6运行按照一定模式,从数组或对象中提取值,并对变量进行赋值,如
        var [a,b,c] = [1,2,3];
        //一些其他方式
        let [ , , a1] = [1,2,3];
        //a1:3
        let [a2,...b2] = [1,2,3,4];
        //a2:1,b2:[2,3,4]
        let [a3,b3,...c3] = [1];
        //a3:1 b3:undefined c3:[]
        let [a4,[b4],c4] = [1,[2,3],4];
        //a4:1 b4:2 c4:4
        function* fibs(){
            var a=0;
            var b=1;
            while (true){
                yield a;
                [a,b] = [b,a+b];
            }
        }
        var [a5,b5,c5,d5,e5,f5] = fibs();
        //f5:5(这个是为什么暂时还不懂,以后在解读,官方解释:fibs是一个Generator函数,原生具有iterator接口,解构赋值时会依次从接口获取值)
        //默认值与惰性求值
        //在解构赋值时可以指定默认值
        var [a6,b6 = 3] = [1];
        //a6:1,b6:3 注意:只有在值严格等于(===)undefined时才会使用默认值,null是不行的
        //如果默认值是一个表达式,则该表达式是惰性求值的,如
        function f(){
            console.log("lvyi")
        }
        let [a7=f()]=[1];
        //不会执行f表达式,只在需要时执行内部指令
        //ps:默认值是可以引用解构赋值中的其他变量的,但是该变量必须先有赋值
        //对象也是可以解构赋值的,原理和数组差不多,但是需要指定模式和变量,并且对象和数组可以嵌套赋值,深入研究比较绕

    2,其他形式的解构赋值

    //对象解构赋值
        var {p:x} = {p:1};
        //p是模式,x才是需要赋值的变量,虽然模式可以省如({x}={1}),但复杂的解构中最好不要省如
        var node={
            loc : {
                start:{
                    line:1
                }
            }
        };
        //loc和start都是模式,line才是变量
    
        //字符串的解构赋值
        const [a1,b2,c3,d4,e5] = 'hello';
        let {length : len} = 'hello';
        //len :5 因为字符串是可以转为数组的,而字符串又有length这个同名的属性,因此这两个赋值都是成功的
    
        //数值和布尔值的解构
        let {toString : s} =123;
        let {toString : s1} = true;
        //解构的规则是只要右边的值不是对象就先转为对象在赋值,因此这个两个都有toString这个属性,那么S就可以取到值
        //但是undefined和null是没有的,因此如果右边是这两个会报错
    
        //函数参数的解构赋值
        function kk([x=0,y=0]){
            return x+y
        }
        kk([1,2]);
        //3,0为默认值
        //看看下面的值是多少?
        console.log([[1,2],[3,4]].map(([d,e]) => d+e));

    3,解构赋值的应用

     //变换变量的值
        [x,y]=[y,x];
        //获取无序的参数或一组参数的值,(最主要方便的用途,以后再也不用遍历json去拿数据了)
        var returnData={
            id:42,
            status : 'ok',
            data: [521,214]
        };
        let {id,status,data:number} = returnData;
        //简单明了
        //为函数参数设定默认值,上一节有提到,挺好理解的,不用再函数内部写一堆var了
  • 相关阅读:
    How Many Answers Are Wrong
    Agri-Net —poj1258
    食物链
    A Bug's Life
    畅通工程
    Shortest path of the king
    Alex and Number
    KMP
    快速幂
    0x04
  • 原文地址:https://www.cnblogs.com/weblv/p/5946665.html
Copyright © 2020-2023  润新知