ES6中的解构赋值
在解释什么是解构赋值前,我们先来看一下, ES5 中对变量的声明和赋值。
var str = 'hello word';
左边一个变量名,右边可以是字符串,数组或对象。
ES6 中增加了一种更为便捷的赋值方式。称为 Destructuring 。好像大家普遍翻译为解构。解构赋值允许我们将数组或对象的属性赋予给任何变量,该变量的定义语法与数组字面量或对象字面量很相似。举个例子可以直观的说明。
let [speak, name] = ['hello', 'destructuring'];
console.log( speak + ' ' + name ); // hello destructuring
数组的解构赋值
用更加直白的话来描述就是,等号两边保持相同的形式(数组对应数组,对象对应对象),则左边的变量就会被赋予对应的值。如果对应的右边值缺失,缺失部分变量值为 undefined ,如果右边值多余,依旧能够正常解构。
// ES6 中
let arr = [1,2,3,4,5];
let [el1, el2] = [arr];
// 或者
let [el1, el2] = [1,2,3,4,5];
// el1 => 1, el2 => 2
解构赋值也是可嵌套的:
let value = [1, 2, [3, 4, 5]];
let [el1, el2, [el3, el4]] = value;
同样可以通过简单地在指定位置省略变量来忽略数组中的某个元素:
let value = [1, 2, 3, 4, 5];
let [el1, , el3, , el5] = value;
更进一步,默认值同样也可以被指定:
let [firstName = "John", lastName = "Doe"] = [];
ES6中,提供了一种将右侧多余的值以数组的形式赋值给左侧变量的语法——“rest“模式:
let [head, ...tail] = [1, 2, 3, 4];
console.log(tail); // [2, 3, 4]
当默认值不存在,变量值就等于 undefined
let [missing] = [];
console.log(missing); // undefined
这里的数组,指的是部署了 [Iterator](http://www.2ality.com/2015/02/es6-iteration.html) 接口的数据结构。
对象的解构赋值
和数组的用法相类似,一个主要的不同点是,对象是无次序排列的,所以变量必须和属性名相同。
let person = {firstName: "John", lastName: "Doe"};
let {firstName, lastName} = person;
解构另一个特性是,变量 keys 可以使用计算后的属性名,但是如果你对这容易混淆的话,不建议使用。
let person = {firstName: "John", lastName: "Doe"};
let {firstName: name, lastName} = person;
// `name`变量将会被声明为 `person.firstName` 的值
函数参数的解构赋值
函数的参数也可以解构赋值。
function add({x: 0, y: 0}){
return x+y;
}
add({1,2}); // 3
null 和 undefined
当尝试解构 null 和 undefined 的时候会报错。这是因为使用对象赋值模式时,被解构的值必需能够转换成一个对象(object)。大多数的类型都可以转换为一个对象,但null和undefined却并不能被转换。
其它
解构赋值的好处有很多,比如
两个值的交换
函数参数默认值
函数返回值
正则匹配的返回值
快速处理 JSON 数据
遍历Map结构ES6 的解构赋值给 JS 的书写带来了很大的便利性,同时也提高了代码的可读性。但是也需要注意一些问题,避免适得其反。
关于圆括号的问题,欢迎翻看阮一峰老师的博客
解构的嵌套尽量不要太深
函数有多个返回值时,尽量使用对象解构而不用数组解构,避免出现顺序对应问题
已声明过的变量不能用于解构
ES6中的解构赋值的更多相关文章
- 【JS】325- 深度理解ES6中的解构赋值
点击上方"前端自习课"关注,学习起来~ 对象和数组时 Javascript 中最常用的两种数据结构,由于 JSON 数据格式的普及,二者已经成为 Javascript 语言中特别重 ...
- ES6 变量的解构赋值
数组的解构赋值 var [a,b,c] = [1,2,3]; 左边是变量,右边是值,根据数据结构一一对应 只要等号两边的模式相同,左边的变量就会被赋予右边对应的值,必须模式相同 如果等号 ...
- ES6里的解构赋值
我们经常定义许多对象和数组,然后有组织地从中提取相关的信息片段.在ES6中添加了可以简化这种任务的新特性:解构.解构是一种打破数据结构,将其拆分为更小部分的过程. 一.引入背景 在ES5中,开发者们为 ...
- ES6 - Note2:解构赋值
ES6的解构赋值就是利用模式匹配从按照一定模式的数组或者对象中提取值赋值给变量. 1.数组的解构赋值 在ES6以前,变量的赋值是直接指定的,以后可以这么来写,如下所示 let [a,b,c] = [1 ...
- ES6 - 变量的解构赋值学习笔记
变量的解析赋值 数组的解析赋值 es6允许按照一定的模式,从数组和对象中提取值,对变量进行赋值,这就称为解构. var a = 1; var b = 2; var c = 3; //在es6中允许写成 ...
- ES6的变量解构赋值
前 言 ES6 解构赋值: ES6允许按照一定模式从数组和对象中提取值,然后对变量进行赋值,这被称为解构. 1.1 数组的结构赋值 1.1.1基本用法 JS中,为变量赋值直接指定.例如下面代码: ...
- es6学习笔记--解构赋值
昨天学习了es6语法中解构赋值,解构赋值在声明中和函数传参提高了灵活性和便捷性,值得掌握该语法. 概念: ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构. 数组的解构 ...
- 关于ES6 的对象解构赋值
之 前写了关于ES6数组的解构 现在 go on ; 解构不仅可以用于数组,还可以用于对象: 对象的解构和数组有一个重要的不同.数组的元素是按次序排列的,变量的取值是由他的位置决定的:而对象的属性没有 ...
- ES6学习之 解构赋值
最近看了一个vue的项目,发现作者大量使用了ES6的语法,包括async, Promise, Set, Map还有一些解构赋值, 才发现自己对于ES6的语法缺乏了总结和运用,看得有点艰难,所以重新学习 ...
随机推荐
- c#常用数值范围汇总
short.MaxValue 32767 short.MinValue -32768 int.MaxValue 2147483647 int.MinValue -2147483648 long.Max ...
- NOIP-金币
题目描述 国王将金币作为工资,发放给忠诚的骑士.第一天,骑士收到一枚金币:之后两天(第二天和第三天),每天收到两枚金币:之后三天(第四.五.六天),每天收到三枚金币:之后四天(第七.八.九.十天),每 ...
- WinIo驱动级键盘模拟编程
转自:http://blog.sina.com.cn/s/blog_455d7a320100vr37.html 前天无聊,翻翻自己的兴趣项目文件夹,发现了这个放下很久的项目!那是大三时候的事了.当时是 ...
- ActiveMQ的安装与使用(单节点)
1. 安装 JDK 并配置环境变量(略) JAVA_HOME=/usr/local/java/jdk1.7.0_72 2. 下载 Linux 版的 ActiveMQ $ wget http://apa ...
- 源码包安装mysql5.6
含有的命令:wget,tar,cp,groupadd,useradd,chown,service,chkconfig,exportsource,mysql_secure_installation,my ...
- windows redis 自动启动
start.bat D: D:\dev\redis- redis-server.exe redis.conf redis.vbs createobject( 之后,把 start.bat 放在redi ...
- linux mysql 定时备份
1.查看磁盘空间情况: 既然是定时备份,就要选择一个空间充足的磁盘空间,避免出现因空间不足导致备份失败,数据丢失的恶果! 存储到当前磁盘这是最简单,却是最不推荐的:服务器有多块硬盘,最好是把备份存放到 ...
- SNMP 优秀帖子
-- 比较系统的描述http://blog.sina.com.cn/s/blog_54837cf301011607.html 几个SNMP官方网站(搜索关键字:snmplibrary C#):http ...
- linux 逆向映射
逆向映射用于建立物理内存页和使用该页的进程的对应页表项之间的联系,在换出页时以便更新所有涉及的进程.得到物理页基址后,根据pfn_to_page可以将页框转换为page实例,page实例中的mappi ...
- 2019/4/22 拓扑排序的高效写法. 模板题HDU1285:确定比赛名次
传送门 Problem Description 有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现 ...