解构赋值

以前,为变量赋值,只能直接指定值。而ES6提出了解构赋值,其在实际开发中可以大量减少我们的代码量,并且让我们的程序结构更清楚。那大家一定就很好奇解构赋值的魅力到底有多大?让我们来揭开它神秘的面纱


1、概念及本质

首先来看一下它的概念和本质:

概念 本质
ES6允许按照一定模式,从数组和对象(以及字符串、数值、布尔值、函数参数等)中提取值,按照对应位置给变量进行赋值 “模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值。

是不是一脸懵,解构赋值到底是个什么东东?慢慢往下看,有意想不到的收获哦。


2、解构赋值的分类

这一部分我们将对解构赋值进行详细的介绍,解构赋值主要分为以下几类:

数组的解构赋值 对象的解构赋值 字符串的解构赋值 数值和布尔值的解构赋值 函数参数的解构赋值

2.1 数组的解构赋值
2.1.1 基本用法
ES6允许以这种形式来赋值:

let [a, b, c] = [5, 6, 7];
   a // 5
   b // 6
   c // 7

如上代码,等号两边可以按照对应位置,去对变量赋值。
那么我们可以看出,数组的解构赋值的特点是按照数据的下标来进行赋值,是有次序的。
下面是一些使用嵌套数组进行解构的例子:

let [foo, [[bar], baz]] = [1, [[2], 3]];
foo // 1
bar // 2
baz // 3

let [ , , third] = ["foo", "bar", "baz"];
third // "baz"

let [x, , y] = [1, 2, 3];
x // 1
y // 3

let [head, ...tail] = [1, 2, 3, 4];
head // 1
tail // [2, 3, 4]

let [x, y, ...z] = ['a'];
x // "a"
y // undefined
z // []

敲重点:只要某种数据结构具有 Iterator 接口(这里大家先有个概念,以后来补充。或者自行去看阮一峰老师的《ES6标准入门》这本书),都可以采用数组形式的解构赋值。否则会报错。

  • 成功的例子

例如,对于Set结构,因为其具有 Iterator 接口,就可以使用数组的解构赋值。

let [x, y, z] = new Set(['a', 'b', 'c']);
x // "a"
  • 报错的例子
    下面的语句都会报错,因为等号右边的值,要么转为对象以后不具备 Iterator 接口(前五个表达式),要么本身就不具备 Iterator 接口(最后一个表达式)。
// 报错
let [foo] = 1;
let [foo] = false;
let [foo] = NaN;
let [foo] = undefined;
let [foo] = null;
let [foo] = {};`

接下来我们还要介绍另外两种情况:一种是解构不成功,另外一种是不完全解构。

  • 解构不成功
    如果解构不成功,变量的值就等于undefined。
let [foo] = [];
let [bar, foo] = [1
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值