深入理解ES6的解构赋值,让你把ES6的解构理解的明明白白,彻彻底底

276 阅读3分钟

一 概述

ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构
(1) 解构赋值是对赋值运算符的扩展
(2)他是一种针对数组或者对象进行模式匹配,然后对其中的变量进行赋值
(3)在代码书写上简洁且易读,语义更加清晰明了;也方便了复杂对象中数据字段获取

二 注意点

(1) = 号两边的模式要相同,是数组都是数组,是对象都是对象

二 使用方法

(1) 数组的解构

`一维数组解构`
let [value1, value2, value3] = ['a', 'b', 'c']
// value1 => a
// value2 => b
// value3 => b   
`二维数组解构`     
let [value1, [value2,value3]] = ['a', ['b','c']]
// value1 => a
// value2 => b
// value3 => b

(2) 对象的解构

等号左侧的的key的顺序不需要和右侧的key一致,但key要保持一致

`对象的完全结构`
let { age, name, sex } = {name:'qinsimin',age:18}  
// age => 18
// name => qinsimin
// sex => undefined
`对象的不完全结构`
let { name } = {name:'qinsimin',age:18}  
// name => qinsimin
`嵌套结构`
let {p: [x, { y }] } = {p: ['hello', {y: 'world'}] }
// x => hello
// y => world	

(3) 属性重命名

作为一名较真的前端程序猿,我们在开发过程中,经常会遇到后台给我们返回的数据总某些字段的命名,不够优雅而且还很长,恰巧我们有需要多个地方使用该变量,气人呀....嘤嘤嘤。。。。。通常我们会像这样let xx = res.xxxxxxxxxx,但是这样又使得我们的前端代码不够优雅。对于一名对代码有高度洁癖的前端来说,这绝对是不允许出现的。。。,此时ES6的“解构”就为我们提供了一个不错的方案。请看下文~~~

let { workingWriteTime: time } = {workingWriteTime:"2020-12-12", desc:"javascript是全世界最垃圾的语言 "}
// time => 2020-12-12

(4) 字符串解构

let [str1, str2, str3] = 'abc'
// str1 => a
// str2 => b
// str3 => c	

(5) 默认值

let [value1, value2, value3='我是默认值'] = ['a', 'b']
// value1 => a
// value2 => b
// value3 => 我是默认值   	

(6) 函数参数的解构 && 默认值

function fun({name, age=18}){
    // name =>  qinsimin
    // age =>  18
}
fun({name:'qinsimin'})	
function sum([num1, num2]){
    // num1 =>  100
    // num2 =>  200
}
sum([100, 200])

(7) 整体对象默认值

function fn({name='qinsimin', age=20} ){}
fn()
// Uncaught TypeError: Cannot read property 'name' of undefined

function fn({name='qinsimin', age=20} = {} ){
    // name => qinsimin
    // age => 20
}
fn()

(8) 函数返回值解构

function array(){
   return [1, 2, 3]
}
let [value1, value2, value3] = array()	
function object(){
   return {
       name:'qinsimin',
       age:18
   }
}
let {name, age} = object()
// name =>  qinsimin
// age =>  18

(9)巧用解构实现变量值的交换

`以前的写法`
let a = 1,b =2,temp;
    temp = a;
    a = b;
    b = temp;
console.log(a,b) // => 2 1

`解构写法`
var num1 = 11,num2 = 22
var [num1, num2] = [num2,num1]
console.log(num1,num2) // => 22 11

(10)剩余参数解构

let {name, age, ...rest} = {name: 'qinsimin', age: 18, sex: 'woman', husband: 'zhailei'}
// name => qinsimin
// age => 18
//rest => { sex: 'woman', husband: 'zhailei' }
let [a,b,...rest] = [1,2,3,4,5]
// a => 1
// b => 2
//rest => [3, 4, 5]
function fun({name,age,...arg}){
      // name => qinsimin
      // age => 18
      // arg => { sex: 'woman', husband: 'zhailei' }
}
fun({name: 'qinsimin', age: 18, sex: 'woman', husband: 'zhailei'})