解构赋值

解构赋值

1.定义

ES6允许按照一定模式从数组和对象中提取值,然后对变量进行赋值,该操作即为解构( Destructuring)。
本质上,这种写法属于“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值。
在这里插入图片描述
在这里插入图片描述

默认值:

当解构模式有匹配结果,且匹配结果是 undefined 时,会触发默认值作为返回结果。

注意:默认值可以引用解构赋值的其他变量,但改变量必须已经声明,否则会报错。
eg: let [x = y, y = 1] = []; // 报错,因为x用到默认值y时,y还没有声明

2.分类

解构数组:
用法:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注意:
如果解构不成功,变量的值就等于undefined。
如果等号的右边不是数组(不是可遍历的结构),将会报错。
解构赋值不仅适用于var命令,也适用于let和const命令。

使用场景:
1.变量声明并赋值时的解构

var foo = ["one", "two", "three"];

var [one, two, three] = foo;

2.变量先声明后赋值时的解构

var a, b;

[a, b] = [1, 2];

3.默认值: 为了防止从数组中取出一个值为undefined的对象,可以在表达式左边的数组中为任意对象预设默认值。

var a, b;

[a=5, b=7] = [1];

4.交换变量

var a = 1;
var b = 3;

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

5.解析一个从函数返回的数组(取元素)

function f() {
  return [1, 2];
}

var a, b;

6.忽略某些返回值(选择性接受变量):你也可以忽略全部返回值:

[,,] = f();

7.将剩余数组赋值给一个变量:注意:如果剩余元素右侧有逗号,会抛出 SyntaxError,因为剩余元素必须是数组的最后一个元素。

var [a, ...b,] = [1, 2, 3];

解构对象:
变量必须与属性同名,才能取到正确的值,位置顺序没关系。

对象的解构赋值的内部机制:
在这里插入图片描述

使用场景:
1.基本赋值

var o = {p: 42, q: true};
var {p, q} = o;

2.无声明赋值:

var a, b;

({a, b} = {a: 1, b: 2});

注意:赋值语句周围的圆括号 ( … ) 在使用对象字面量无声明解构赋值时是必须的。
{a, b} = {a: 1, b: 2} 不是有效的独立语法,因为左边的 {a, b} 被认为是一个块而不是对象字面量。
然而,({a, b} = {a: 1, b: 2}) 是有效的,正如 var {a, b} = {a: 1, b: 2}
你的 ( … ) 表达式之前需要有一个分号,否则它可能会被当成上一行中的函数执行。

3.给新的变量名赋值

var c = {p: 1, q: true};
var {p: foo, q: bar} = c;

4.默认值

var {a = 1, b = 2} = {a: 3};

5.给新的变量命名并提供默认值

var {a:aa = 1, b:bb = 2} = {a: 3};

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

let [a,b,c]='hello';//a为h,b为e,c为l

类似数组的对象都有一个length属性,因此还可以对这个属性解构赋值。

let {length:name} = 'hello';
//undefined
console.log(name);
//5

数值和布尔值的解构赋值:
解构赋值的原则是,如果等号右边不是对象,则先转换为对象。
如果等号右边无法转换为对象,则会报错,如nu11和undefined

函数参数的解构赋值:
函数调用时,会将实参传递给形参,其过程就是实参赋值给形参。因此,也可以使用解构赋值。
其规则与数组、对象的解构赋值一致, 关键看参数是采用哪种解构赋值方式。

function add([x,y=1]){return x + y;}let a = add([2]);
//undefined
//a
//3

解构赋值使用场景:

1.交换变量的值:

[x,y] = [y,x];

2.方便从函数取值:

function fn(){return [1,2,3];}
var [a,b,c] =fn();

3.函数参数的定义:

function fn({x,y,z}){...};
f({z:1,y:2,x:3});

4.提取JSON数据:

var student = {id:1,name:"a",data:[123,456]};
let{id,name,data:number} = student;

5.函数默认参数值:

function fn({x=1,y=2} = {}){return [x,y];}
fn({x:3});

7.通过解构赋值, 可以将属性/值从对象/数组中取出,赋值给其他变量。

let a, b, rest;
[a, b] = [10, 20];

console.log(a);
// expected output: 10

console.log(b);
// expected output: 20

[a, b, ...rest] = [10, 20, 30, 40, 50];

console.log(rest);
// expected output: Array [30,40,50]

解构赋值使用了相同的语法,不同的是在表达式左边定义了要从原变量中取出什么变量。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值