ES6中的解构

解构赋值

按照某种模式将数组或对象中的值赋给变量称为解构。
解构赋值的规则是,只要等号右边的值不是对象或数组,就先将其转为对象。
由于undefinednull无法转为对象,所以对它们进行解构赋值,都会报错。

数组的解构

只要等号左右两边的解构相同。左侧的变量就会赋予对应的值。
实例:

let [num1,num2] = [1,2]  // num1=1   num2=2   完全解构
let [num1,num2] = [1,2,3] // num1=1   num2=2   不完全解构
let [num1,[num2],num3] = [1,[2,3],4] // num1=1  num2=2  num3=4   不完全解构
let [num1,,num2] = [1,2,3] // num1=1   num2=3  不完全解构

**注**不完全解构是指等号左边的模式只匹配一部分等号右边的数组。

解构不成功,变量的值为undefined
let [num1] = [] // num1=undefined
let [num1,num2] = [1] // num1=1   num2=undefined
设置默认值

解构的时候可以设置默认值,默认值只有在匹配的数组成员严格等于undefined的时候才会生效。

let [num1=1] = [null]  // num1=null
let [num1=1] = [undefined] //num1=1
默认值引用解构赋值的其它变量

默认值可以引用解构赋值的其它变量,但是该变量在引用的时候必须已经声明。实例:

let [num1=1,num2=num1] = [1,2]  // 正确
let [num1=num2,num2=2] = [1,2]  // 错误

对象的解构赋值

基本用法实例:
let {name,sex} = {name:'张三',sex:0}  // name='张三'  sex=0
解构失败变量的值为undefined
let {name} = {address:'中国北京',hobby:'跑步'}  // name=undefined
对象解构赋值注意

对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量。真正被赋值的是后者,而不是前者。实例:

let {name:aliasName} = {name:'张三'}  
/* aliasName='张三' 真正被赋值的是aliasName,而不是name。
name只是一种匹配模式,aliasName才是真正的变量。*/

// 对已声明的变量结构赋值时需要特别注意
let userName = '张三'
{userName} = {userName:'李四'} 
/* 上面代码会报错,因为  {userName} 存在歧义。
js会把它理解成代码块,解决方法是使用括号括起来。如下*/
({userName} = {userName:'李四'})
对象解构使用默认值
let {name='张三'} = {name:'李四',sex:1} // name='李四'
let {name='张三'} = {} // name='张三'
let {name:aliasName='张三'} = {name:'李四',sex:1} // aliasName='李四'

注意:默认值生效的条件是,对象的属性值严格等于undefined

函数参数的结构赋值

function add([num1,num2]){
	return num1+num2
}
let sum = add([1,5]) // sum=6

function add1({num1,num2}){
	return num1+num2
}
let sum1 = add1({num1:6,num2:8}) // sum1=14
函数参数的默认值
[1, undefined, 3].map((x = 'hello') => x);
// [ 1, 'hello', 3 ]  undefined 触发函数参数的默认值。

字符串的解构赋值

字符串解构赋值时,字符串被转换成了一个类似数组的对象。

let [a,b,c] = 'hello' // a='h'  b='e'  c='l'
let {length} = 'hello' // length = 5
let {length:len} = 'hello' // len=5   类似数组的对象都有一个length属性
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值