ES6变量的解构赋值及应用

数组的解构赋值

数组的解构赋值

const arr = [1,2,3,4];
let [a,b,c,d] = arr;

更复杂的匹配规则

const arr = ['a','b',['c','d',['e','f'.'g']]];
const [ , , [ , , [ , , g]]] = arr;

同理每一项用逗号隔开即可。

扩展运算符

 

使用扩展运算符合并数组

 

const arr1 = [1,2,3];
const arr2 = ['a','b'];
const arr3 = ['zz',1];
const arr4 = [...arr1, ...arr2, ...arr3];

结果如下:

  

 

把剩下的所有参数作为数组赋值给c

const arr = [1,2,3,4,5,6];
const [a,b,...c] = arr;

带有扩展运算符的变量必须放在最后面,因此以下写法是错误的。

 

const arr = [1,2,3,4,5,6];
const [a,b,...c,d] = arr;

默认值         

当变量d没匹配到会是undefined

const arr = [1,undefined,undefined];
const [a,b,c,d] = arr;

 

设置默认值后,当数组值为undefined时就会使用默认值,注意只有在undefined的时候取默认值,为null的时候依然为null

 

const arr [1,undefined,undefined];
const [a, b =2, c, d = 'aaaa'] = arr;

数组解构赋值的应用

交换变量:使用解构赋值交换变量更简单只需一行代码

 

let a = 20;
let b = 10;

//let temp;
//temp = 0;
//temp = a;
//a = b;
//b = temp;

[a, b] = [b, a];

接收函数的多个返回值

 

function getUserInfo(id){
    // . .ajax
    
    return [
        true,
        {
            name:'小明',
            gender:'女',
            id: id
        },
        '请求成功'
    ];
};

const [status, data, msg] = getUserInfo(354);

 

对象的解构赋值

  • 对象的解构赋值与数组的解构赋值相似
  • 等号左右两边都为对象结构 ,const { a, b} = {a:1,b:2}
  • 左边的{}中为需要赋值的变量
  • 右边为需要解构的对象

 对象解构赋值的用法

const obj = {
    a:'对象',
    b:'解构'
}

const {a, b} = obj;

 稍微复杂的解构条件

const player = {
    nickname:'喵喵喵',
    master:'东海龙王',
    skill:[{
        skillName:'龙吟',
        mp:'100',
        time:6000
    },{
        skillName:'龙卷雨击',
        mp:'400',
        time:3000
    },{
        skillName:'龙腾',
        mp:'900',
        time:6000
    }]
};

const { nickname } = player;
const { master } = player;
const { skill:[skill1, { skillName } ] } = player;

 此时的skill1是skill数组的第一项,skillName是skill数组的第二项的skillName

不能以下方法获取skill数组第三项的skillName,因为const是不能被重复声明的

const { nickname } = player;
const { master } = player;
const { skill:[skill1, { skillName }, { skillName } ] } = player;

 改成如下即可使用sklName表示

const { skill:[skill1, { skillName }, { skillName: sklName } ] } = player;

结合扩展运算符

使用扩展运算符把一个对象的部分属性合并

const obj = {
    saber:'阿尔托利亚',
    archer:'卫宫',
    lancer:'瑟坦达'
};

const { saber, ...oth } = obj;

结果:

 使用扩展运算符合并两个对象

const obj1 = {
    a:'合并',
    b: '对象'
}

const obj = {
    c:'我是',
    ...obj1,
};

 如何对已经声明了的变量进行对象的解构赋值

let age;
const obj = {
    name:'小明',
    age:22
};

{ age } = obj; //这样写不行

 这样写会把{age}当成一个块级作用域

解决方案:加个括号

({ age } = obj); 

 但依然建议以下写法

let age;
const obj = {
    name:'小明',
    age:22
};

let { age } = obj; 

默认值

let girlfriend = {
    name:'小红',
    age:22,
};

let { name, age =24, hobby = ['学习'] } = girlfriend;

跟数组一样,当匹配到undefined时候就会使用默认值

对象的解构赋值的主要用途

提取对象属性

const { name, hobby:[ hobby1], hobby } = {
    name:'小坨坨',
    hobby:['学习']
};

能拿到name属性、hobby数组的第一项命名为hobby1、还能拿到hobby属性

使用对象传入乱序的函数参数

 

function AJAX({
    url,
    data,
    type = 'get'
}){
    console.log(type);
};

AJAX({
    data:{
        a:1
    },
    url:'/getinfo',
});

获取多个函数的返回值

function getUserInfo(uid){
    // ...ajax
    
    return {
        status: true,
        data: {
            name: '小红'
        },
        mag: '请求成功'
    };
};

const { status, data, msg:message } = getUserInfo(456);

 如果想给变量名换名的话,在后面加:newName即可

 

 

 

 

 

 

 

 

 

字符串的解构赋值

字符串的解构赋值

const str = 'I am the bone of my sword'; //我是剑骨头
const [ a, b, c ] = str;

 结果:

也可使用扩展运算符

 

const str = 'I am the bone of my sword'; //我是剑骨头
const [ a, b, c, ...oth ] = str;

结果:

以下三种写法的结果都一样

const [ ...spStr1 ] =  str;
const spStr2 = str.split('');
const spStr3 = [ ...str ];

结果:

提取属性

 

const { length, split } = str;

数值和布尔值的解构赋值

const { valueOf } = 1;
const { toString } = false;

 

函数参数的解构赋值

function swap([x, y]) {
    return [y, x];
};

let arr = [1, 2];
arr = swap(arr);

对象的解构赋值

 

function Computer({
    cpu,
    memory,
    software = ['ie6'],
    OS = 'windows 3.5'
}){
    console.log(cpu);
    console.log(memory);
    console.log(software);
    console.log(OS);
};

new Computer({
    memory: '128G';
    cpu:'80286';
    OS:'windows 10'
});

结果:

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值