ES6解构赋值--{} 快速掌握

460 阅读2分钟
ES6允许我们按照一定的模式从数组和对象中提取值并赋值给变量,这个方式叫解构赋值。对我们提高效率有很大的帮助,以下,就谈谈对解构赋值的大致使用。

对数组进行结构赋值

以往我们批量进行赋值时总要写很多行:

// 以往的赋值
let x = 1;
let y = 2;
但是当我们用到解构赋值时,我们可以这样写:

// 解构赋值
let [x, y] = [1, 2]
这让我们节省了一些代码量,当然不止这样的用法。

在面试的时候我就遇到这样的面试题,如何一行代码,交换两个变量的值,这时候解构赋值就有了用处:

//  一条代码交换 x, y 的值
let x = 1;
let y = 2;
[x, y] = [y,x]; // x, y的值发生了交换
console.log(x,y)
了解上面的简单的用法,现在了解一点更复杂的。

现有一个数组,获取下标为0的元素,并将剩下的元素赋值给一个新数组。

以往我们碰到这样的问题,我们会将数组为0的元素获取到,然后使用slice方法获取新数组。如下:

let arr = [1,2,3,4,5,6,7];
let arrOne = arr[0];
let newArr = arr.slice(1,arr.length)
console.log(newArr,arrOne)
但是有了赋值结构以后,我们可以进行如下操作:

let arr = [1,2,3,4,5,6,7];
let [arrOne, ...newArr] = arr;
console.log(newArr,arrOne)
一行代码,就可以解决这个问题!!!剩下还有很多用法,大家可以自由探索。
注意:在解构赋值时,在没有匹配值的情况下,会为undefined。以上写法对其他类型的值进行结构时会报错。

对对象进行解构赋值

与数组相似,对象的结构赋值,可以令我们获取该对象的值。

let obj = {
    name: "骑着单车的人",
    age: 18
}
let {name, age} = obj
你可能想说,你不想让变量名和对象的属性名一致,我们可以这样写:

let {name: username, age: userage} = obj
解构赋值没有匹配到情况下会赋值undefined,为了避免出现这样的情况,ES6允许我们设置默认值:

let obj = {
    name: "骑着单车的人",
    age: 18
}
let {name, age, sex = "男"} = obj

其他用法

提取后端返回的JSON中的信息

let json = {
  code: 200,
  data: [],
  msg: '获取成功'
}
let {code, data, msg} = json

当我们需要使用模块中的方法时

import {mapState, mapActions} from 'vuex' // 使用VueX提供的辅助方法