变量的解构赋值

1.什么是解构

ES6中,按照一定的模式,从数组或对象中提取值,对变量进行赋值。这个过程叫做解构赋值。

2.数组解构

     // ES6 之前的写法
        const arr = ["元素一", "元素二", "元素三", "元素四", "元素五"];
        let one = arr[0];
        let two = arr[1];
        let three = arr[2];
        let four = arr[3];
        let five = arr[4];

        console.log(one);
        console.log(two);
        console.log(three);
        console.log(four);
        console.log(five);
   // ES6 写法
       let [one, two, three, four, five] = ["元素一", "元素二", "元素三", "元素四", "元素五"];
        console.log(one);
        console.log(two);
        console.log(three);
        console.log(four);
        console.log(five);

在这里插入图片描述
本质上,这种写法属于“模式匹配”。只要赋值号两边的模式相同,左边的变量就会被赋予对应的值。

        let [a, [b, c]] = [1, [2, 3]];
        console.log(a);
        console.log(b);
        console.log(c);
        let [e, , f] = [4, 5, 6];
        console.log(e);
        console.log(f);

在这里插入图片描述
解构失败时,变量的值为undefined

    let [a, b] = [1];
        console.log(a); //1
        console.log(b); //undefined

在这里插入图片描述

不完全解构

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

在这里插入图片描述

3.对象解构赋值

        const obj = {
            name: "亚索",
            skill: "hasakei"
        }
        let {name,skill} = obj;
        console.log(name); //亚索
        console.log(skill); //hasakei
        let jsonData = {
            id:10,
            name:"蓝牙耳机",
            price:"100"
        };
        let {id,name,price} = jsonData;
        console.log(id,name,price);

变量名与属性名相同,才能取到正确的值。
如果想要自定义变量名,则用:进行修改。

        const obj = {
            name: "亚索",
            skill: "hasakei"
        }
        let {name: n,skill} = obj;
        console.log(n);
        console.log(skill);

在这里插入图片描述

方法解构

var obj = {
    r:function(){
    	console.log("狂风绝息斩");
    },
    e:function(){
    	console.log("e去不复返");
    }
}
const {r,e} = obj;
r();
e();

在这里插入图片描述

        const obj = {
            p: [
                "hello", {
                    y: "world"
                }
            ]
        }
        let {p:[a,{y:b}]}=obj;
        console.log(a);
        console.log(b);

在这里插入图片描述

        const obj = {
            a:{
                b:{
                    c:1,
                    d:2
                }
            }
        }
        let {a:{b:{c,d}}} = obj;
        console.log(c);
        console.log(d);

在这里插入图片描述

注意点

let x;
{x} = {x:1};
console.log(x);

以上代码是错误写法。{x}前面如果没有let ,const的变量声明的关键字,则js会将其视为代码块。

如果需要提前声明变量,则需要将解构语句用小括号包裹起来;

let x;
({x} = {x:1});
console.log(x);

数组本质也是特殊的对象,也可以对数组进行对象属性的解构。

        const arr = ["诺手", "蝎子", "劫", "EZ", "女坦"];
        let {
            length,
            0: first,
            4: last
        } = arr;
        console.log(length);
        console.log(first);
        console.log(last);

在这里插入图片描述

4.字符串解构

        const str = 'hello';
        let [a, b, c, d, e] = 'hello';
        let {
            length
        } = 'hello';
        console.log(length); //5

类数组的对象都有一个length属性,我们可以对这个属性进行解构赋值。

5.函数参数的解构赋值

function add([x,y]){
	return x+y;
}
let sum = add([1,2]);
console.log(sum);//3

以上案例,函数add的参数表面上一个数组,但是在传入参数的那一刻,数组参数会被解构成变量x和与y.

6.用途

6.1 交换变量的值

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

6.2 从函数中返回多个值

        function fn() {
            return [1, 2, 3];
        }
        let [a, b, c] = fn();
        console.log([a, b, c]);
            // console.log(a);
            // console.log(b);
            // console.log(c);

        function fn2() {
            return {
                name: "yasuo",
                age: "25"
            }
        }
        let {name,age} = fn2();
        console.log({name,age});
        // console.log(name);
        // console.log(age);

6.3 函数参数的定义

function fn({a,b,c}){
    console.log(a);
    console.log(b);
    console.log(c);
}
fn({c:3,b:2,a:1})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值