es6-解构赋值

数组解构赋值

  • 基本用法
let [a, b, c] = [1, 2, 3];
a // 1;
b // 2;
c // 3;
-----------------------------------
let [a, b, c] = [1, [2, 3], 4];
a // 1;
b // [2, 3];
c // 4;
-----------------------------------
let [a, [b], c] = [1, [2, 3], 4];
a // 1;
b // 2;
c // 4;
-----------------------------------
let [a, ...b] = [1, 2, 3, 4];
a // 1;
b // [2, 3, 4];
  • 默认值
let [a, b = 5] = [1];
a // 1;
b // 5;
-----------------------------------
let [a, b = 5] = [1, 2];
a // 1;
b // 2;
-----------------------------------
let [a, b = 5] = [1, undefined];
a // 1;
b // 5; undefined不生效
-----------------------------------
let [a, b = 5] = [1, null];
a // 1;
b // null;

  • 默认值可以引用解构赋值的其他变量,但该变量必须己经声明。
let [x = 1 , y = x] = [];			//x=l ; y=l 
let [x = 1, y = x] = [2];			//x=2 ; y=2 
let [ x = 1 , y = x] = [ 1 , 2];	//x=l; y=2 
let [ x = y , y = l] = [];			//ReferenceError y没有声明

对象的解构赋值

对象解构赋值与数组不同,数组根据位置进行赋值,而对象属性没有顺序,变量名必须和属性名相同才能赋值。

let {name, age} = {age: 18, name: 'uzi'};
name // uzi;
age // 18;
-----------------------------------
// 变量名没有相同属性名,等于undefined
let {profession} = {age: 18, name: 'uzi'};
profession // undefined;
-----------------------------------
// 变量名和属性名不同可以写成下面这样
let {play: profession} = {age: 18, name: 'uzi', play: 'ADC'};
profession // ADC;

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

  • 嵌套
let people = {
	name: 'uzi',
	playHero: ['小炮', {best: 'vn'}]
};
let {name, playHero:[hero1, {best}]} = people;
name // uzi;
best // vn;
playHero // playHero is not defined。playHero是模式不是变量,不会被赋值
let {name, playHero} = people;
name // uzi;
playHero // ["小炮", {best: "vn"}]
// playHero是变量,会被赋值

字待串的解构赋值

字符串也可以解构赋值。这是因为此时字符串被转换成了一个类似数组的对象。

let [a, b, c] = 'uzi';
a // u;
b // z;
c // i;
-----------------------------------
//类似数组的对象都有一个 length 属性 因此还可以对这个属性进行解构赋值
let {length: len} = 'uzi';
len // 3;

数值和布尔值的解构赋值

解构赋值时 如果等号右边是数值和布尔值 ,则会先转为对象。

let {toString: s} = 123;
s === Number.propotype.toString; // true
-----------------------------------
let {toString: s} = true; 
s === Boolean.prototype.toString; // true
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值