ES6标准入门之变量的解构赋值简单解说
首先我们来看一看解构的概念,在ES6标准下,允许按照一定模式从数组和对象中提取值,然后对变量进行赋值,这被称作解构,简而言之粗糙的理解就是变相赋值。
解构赋值的规则是,只要等号右边的值不是对象或者数组,就先将其转为对象。
一、数组的结构赋值
以前为变量赋值只能直接指定。而ES6允许从数组中提取值,按照对应位置对变量赋值,我们先来看下面一段代码
//ES5对变量赋值只能直接指定
var a = 10;
var b = 20;
var c = 30;
//ES6允许写成下面这样
let [a, b, c] = [10, 20, 40]
//a: 10
//b: 20
//c: 30
//本质上,这种写法属于“模式匹配”
ES6通过数组解构对变量赋值
在上面的代码段中提到了模式匹配,所谓模式匹配就是只要等号两边模式相同,左边的变量就会被赋予对应的值,看下面代码
let [foo, [[bar], baz]] = [1, [[2], 3]];
foo //
bar //
baz //
模式匹配说明
如果解构不成功,变量的值就等于underfined。解构赋值允许指定默认值,但是默认值生效的条件是一个数组成员严格等于(===)underfined,默认值才会生效,let [x = 1] = [underfined],此时x = 1生效。
二、对象的解构赋值
对象的解构赋值与数组有一个重要的不同,数组的元素是按照次序排列的,变量的取值是由它的位置决定的;而对象的属性没有次序,变量必须与属性值同名才能取到正确的值。我们先来看一段对象赋值的代码
let { bar, foo } = { foo: "aaa", bar: "bbb" }
foo // "aaa"
bar // "bbb"
let { baz } = { foo: "aaa", bar: "bbb" }
baz // underfined
对象解构赋值
从上面的代码中可以看出,等号左边的两个变量的次序和等号右边两个同名属性的次序不一致,但是对取值完全没有影响。第二个例子的变量没有对应的同名属性,导致去不导致,最后等于underfined。如果变量名与属性名不一致,必须写成下面这样:
let { foo: baz } = { foo: "aaa", bar: "bbb" };这样baz就能取到值,这种也是模式匹配,foo是模式,baz才是变量。对象解构中模式匹配常用于嵌套对象模式匹配。
三、字符串解构赋值
字符串也可以解构赋值,这是因为此时字符串被转换成了一个类似数组的对象。看下面一段代码
const [a, b, c, d, e] = 'hello' a // h
b // e
c // l
d // l
e // o
字符串解构赋值
数值和布尔值姐解构赋值业火先将数值和布尔值转为对象在进行解构赋值。
四、用途
1、交换变量的值
let x = 1;
let y = 2;
[x, y] = [y, x];
此时x和y的值已经发生了替换,换做以前,只能通过中间变量来实现。
2、从函数返回多个值
function example () {
return [1, 2, 3]
}
let [a, b, c] = example ();此时a=1,b=2,c=3
3、函数参数的定义
function f ([x, y, z]) { ... }
f([1, 2, 3])
4、提取JSON数据
let jsonData = {
id: 42,
status: "OK",
data: [867, 5309]
};
let { id, status, data: number } = jsonData;
console.log(id, status, number);
// 42, "OK", [867, 5309]
JSON数据提取
ES6标准入门之变量的解构赋值简单解说的更多相关文章
- ES6学习笔记之变量的解构赋值
变量的解构赋值 ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构. 数组的解构赋值 以前,为变量赋值,只能直接指定值: 1 2 3 var a = 1; var b = 2; ...
- ES6学习 第二章 变量的解构赋值
前言 该篇笔记是第二篇 变量的解构赋值. 这一章原文链接: 变量的解构赋值 解构赋值 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). 解构 ...
- ES6入门之变量的解构赋值(二)
前言 在上一章 ES6入门之let和const命令中我们对ES6的相关语法已经有了初步了解,上一章中我们主要学习了三大部分的内容,let命令的使用,块级作用域,const命令的使用,那么从本篇博客将进 ...
- ES6系列_3之变量的解构赋值
ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构. 解构有三种类型: 1.数组的解构赋值 (1)简单的数组解构 以前,我们给变量赋值是直接单个指定值,比如: let a=0; ...
- ES6第三节:变量的解构赋值
ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构.下面我们看实际的例子: 一.数组解构: let [a,b,c] = [1,2,3]; console.log(a); //a ...
- es6学习2:变量的解构赋值
一:数组的解构赋值 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构 let [foo, [[bar], baz]] = [1, [[2], 3]]; foo bar ba ...
- ES6 - 基础学习(3): 变量的解构赋值
解构赋值概述 1.解构赋值是对赋值运算符的扩展. 2.它是一种针对数组或者对象进行模式匹配,然后对其中的变量进行赋值. 3.代码书写上显得简洁且易读,语义更加清晰明了:而且还方便获取复杂对象中的数据字 ...
- ES6 第三章 变量的解构赋值 具体参照http://es6.ruanyifeng.com
1.基本用法 let [a, b, c] = [1, 2, 3];左右两边解构格式要保持一致. 2.默认值 let [x, y = 'b'] = ['a']; // x='a', y='b' let ...
- ECMAScript 6 入门之变量的解构赋值
1.数组 1. var a=1,b=2,c=3; console.log("a:",a) console.log("b:",b) console.log(&qu ...
随机推荐
- JavaSE 集合补充点(JDK1.9对集合添加的优化)
通常,我们在代码中创建一个集合(例如,List 或 Set ),并直接用一些元素填充它. 实例化集合,几个 add方法调用,使得代码重复. public class Demo01 { public s ...
- Retrofit 2.0 使用和原理
使用教程: http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/1016/3588.html retrofit2 与okhttp关系 ...
- Spring全家桶系列–SpringBoot渐入佳境
//本文作者:cuifuan //本文将收录到菜单栏:<Spring全家桶>专栏中 首发地址:https://www.javazhiyin.com/20913.html 萌新:小哥,我在实 ...
- Three.js开发指南---粒子和粒子系统(第七章)
使用粒子可以很容易的创建很多细小的物体,例如雨滴雪花等 本章主要内容: 1 使用ParticleBasicMaterial(基础粒子材质)来创建和设计粒子 2 使用ParticleSystem来创建一 ...
- POJ3694(KB9-D 割边+LCA)
Network Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 10371 Accepted: 3853 Descript ...
- JavaScript--事件绑定及深入(26)
// 事件绑定分为两种: // 一种是传统事件绑定(内联模型/脚本模型);上一章内容; // 一种是现代事件绑定(DOM2级模型);现代事件绑定在传统事件绑定基础上提供了更强大的功能; 一 传统事件绑 ...
- layui 三级菜单
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- 洛谷P3586 [POI2015]LOG(贪心 权值线段树)
题意 题目链接 Sol 显然整个序列的形态对询问没什么影响 设权值\(>=s\)的有\(k\)个. 我们可以让这些数每次都被选择 那么剩下的数,假设值为\(a_i\)次,则可以\(a_i\)次被 ...
- js-redux学习笔记2
1.为了 dispatch 一个 action,我们需要一个 dispatch 函数.可以用一个 action creator 去发送一个 action. var setNameActionCreat ...
- Maven学习(三)maven原理概念详述
maven相关概念 maven坐标 Maven世界拥有大量构建,当我们需要引用依赖包是,需要用一个用来唯一标识去确定唯一的一个构建.如果拥有了统一规范,就可以把查找工作交给机器. 类似于空间找点的坐标 ...