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 ...
随机推荐
- PCA算法Python实现
源代码: #-*- coding: UTF-8 -*- from numpy import * import numpy def pca(X,CRate): #矩阵X每行是一个样本 #对样本矩阵进行中 ...
- [android] ndk环境的搭建
C语言的编辑加运行,分两步 编译阶段 连接阶段 java语言的步骤是 转成.class文件 java的虚拟机运行 C语言在windows上==> .o中间文件 ==>.exe可执行文件 ...
- Service 动态更新 UI
http://blog.csdn.net/u013724061/article/details/38642049 最终效果: 动态显示当前时间和电量 思路: 首先在Activity里用内部类定义两种广 ...
- es7新增的2个特性
- python变量作用域,函数与传参
一.元组传值: 一般情况下函数传递参数是1对1,这里x,y是2个参数,按道理要传2个参数,如果直接传递元祖,其实是传递一个参数 >>> def show( x, y ): ... p ...
- 【代码笔记】iOS-导航条的标题(label)
一,效果图. 二,代码. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the ...
- 纯小白入手 vue3.0 CLI - 2.6 - 组件的复用
vue3.0 CLI 真小白一步一步入手全教程系列:https://www.cnblogs.com/ndos/category/1295752.html 我的 github 地址 - vue3.0St ...
- React-Native-Android-Studio整合开发+环境配置+官方实例
linux下React Native开发环境搭建,使用Android-studio工具进行React Native整合开发. 参考React Native的官方文档,通过图文详细记录开发过程.可以查看 ...
- onlyoffice新版5.1.2版解决中文汉字输入重复等问题
一个星期前新版更新,从5.07到了5.1.2.9.所以我的网盘中的镜像也做了相应的更新. 原来说的几个缺点,已经修改了几个,比如chrome浏览器和opera浏览器中,输入汉字,然后输入符号的时候,会 ...
- 安卓基础之Activity的四种启动模式
Activity的四种启动模式 Activity的启动模式在清单文件中配置: <activity ... activity:lauchMode:"..."; //有四种模 ...