美文网首页
变量的解构赋值

变量的解构赋值

作者: Artifacts | 来源:发表于2019-08-03 20:59 被阅读0次

    1. 数组的解构赋值

    基本用法:ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构
    
        //以前,为变量赋值,只能直接指定值。
    
    var a = 1; var b = 2; var c = 3;
     
        //ES6允许写成下面这样。
     
    var [a, b, c] = [1, 2, 3];
     
    let [foo, [[bar], baz]] = [1, [[2], 3]];
    foo // 1  bar // 2 baz // 3
     
    let [x, , y] = [1, 2, 3];
    x // 1 y // 3
     
    let [x, y, ...z] = ['a'];
    x // "a" y // undefined z // []
     
    let [head, ...tail] = [1, 2, 3, 4];
    head // 1 tail // [2, 3, 4]
    
     
     let [ , , third] = ["foo", "bar", "baz"];
    third // "baz"    
    

    上面代码表示,可以从数组中提取值,按照对应位置,对变量赋值。
    本质上,这种写法属于“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值。

    • 数组模式和赋值模式统一
    • 解构的默认值:

    在解构赋值时,是允许使用默认值的。举例如下:

    {
        //一个变量时
        let [foo = true] = [];
        console.log(foo); //输出结果:true
    }
    {
        //两个变量时
        let [a, b] = ['生命壹号']   //a 赋值为:生命壹号。b没有赋值
        console.log(a + ',' + b); //输出结果:生命壹号,undefined
    }
    {
        //两个变量时
        let [a, b = 'smyhvae'] = ['生命壹号']   //a 赋值为:生命壹号。b 采用默认值 smyhvae
        console.log(a + ',' + b); //输出结果:生命壹号,smyhvae
    }
    
    • undefined和null的区别:

    如果我们在赋值时,采用的是 undefined或者null,有什么区别?

    {
        let [a, b = 'smyhvae'] = ['生命壹号', undefined]; //b 虽然被赋值为 undefined,但是 b 会采用默认值
        console.log(a + ',' + b); //输出结果:生命壹号,smyhvae
    }
    {
        let [a, b = 'smyhvae'] = ['生命壹号', null];  //b 被赋值为 null
        console.log(a + ',' + b); //输出结果:生命壹号,null
    }
    

    undefined:相当于什么都没有,此时 b 采用默认值。
    null:相当于有值,但值为 null。

    2. 对象的解构赋值

        let { foo, bar } = { bar: '我是 bar 的值', foo: '我是 foo 的值' };
        console.log(foo + ',' + bar); //输出结果:我是键 foo 的值,我是键 bar 的值
    

    注意:对象的解构与数组有一个重要的不同。数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才能取到正确的值。

    • 圆括号的使用:

    如果变量 foo 在解构之前就已经定义了,此时你再去解构,就会出现问题。下面是错误的代码,编译会报错:

        let foo = 'haha';
        { foo } = { foo: 'smyhvae' };
        console.log(foo);
    

    要解决报错,只要在解构的语句外边,加一个圆括号即可:

        let foo = 'haha';
        ({ foo } = { foo: 'smyhvae' });
        console.log(foo); //输出结果:smyhvae
    

    3. 字符串解构

    const [a,b,c,d,e,f]="12345";
    console.log(a);
    console.log(b);
    console.log(c);
    console.log(d);
    console.log(e);
    console.log(f);
    //1
    //2
    ...
    //undefined
    

    相关文章

      网友评论

          本文标题:变量的解构赋值

          本文链接:https://www.haomeiwen.com/subject/zmefxctx.html