ECMAScript6--解构


Posted in Javascript onMarch 30, 2017

大致介绍

解构:就是将声明的一组变量和与相同结构的数组或者对象的元素数值一一对应,并将变量相对应元素进行赋值

数组解构

例子:

let [a,b,c] = [1,2,3];
 console.log(a); //1
 console.log([a,b,c]); //[1, 2, 3]

可以看到,数组中的a,b,c分别对应1,2,3

嵌套的数组也可以进行解构

let [a,[b,[c]]] = [1,[2,[3]]];
 console.log(c); //3

 let [d,,e] = [1,2,3];
 console.log(e); //3

 let [f,...tail] = [1,2,3];
 console.log(tail); //[2, 3]

在解构不成功时,变量的值就是undefined

let [a,b] = [1];
 console.log(b); //undefined

不完全解构也是可以的

let [a,b,c] = [1,2,3,4];
 console.log(c); //3

也可以设置默认值

let [a = 1] = [];
 console.log(a); //1

 let [b = 1] = [2];
 console.log(b); //2

 let [c = 1] = [undefined];
 console.log(c); //1

 let [d = 1] = [null];
 console.log(d); //null

注意:在ES6中使用严格相等运算符(===)。所以如果默认值不严格相等undefined,默认值就不会生效。例如null

默认值也可以是表达式,但是要注意只有默认值在使用时才会触发函数(惰性求值)

function f(){
  alert(1);
 }
 let [a = f()] = [3]; //f()不会执行
 let [b = f()] = [undefined]; //会执行

对象解构

例子:

let {foo,bar} = {foo:1,bar:2};
 console.log(foo); //1

注意:与数组不同,对象解构时不是根据位置对变量赋值的,而是通过变量名进行赋值,即变量名和属性名必须相等才可以进行赋值,位置不重要

let {bar,foo} = {foo:1,bar:2};
 console.log(foo);//1

如果变量名和属性名不相同,则要采取下面的方法

let {first: f,last: l} = {first:1,last:3};
 console.log(l); //3

意思就是先在对象中查找first属性,如果有就赋值给f,其中first是匹配的模式,而f才是真正的变量

所以对象解构的完整形式是:

let {first: first,last: last} = {first:1,last:3}; 

对象解构也可以进行嵌套

let obj = {
  a:1,
  b:[
   'hello',
   {c:'world'}
  ]
 }
 let {a: a,b: [h,{c:w}]} = obj;
 console.log(a); //1
 console.log(h); //hello
 console.log(w); //world

对象解构也可以设置默认值,并且如果解构失败,变量会赋值undefined

let {x: x = 1,y: y=2,z: z=3,w: w} = {x:3,y:null,z:undefined};
 console.log(x) //3
 console.log(y) //null
 console.log(z) //3
 console.log(w) //undefined

字符串解构

字符串之所以能够解构是因为此时字符串转换成了一个数组

let [a,b,c] = 'hello';
 console.log(a); //h
 console.log(b); //e
 console.log(c); //l

数值和布尔值解构

解构赋值时,如果等号右边是数值和布尔值,则会先转为对象

let {toString: s} = 123;
s === Number.prototype.toString // true

let {toString: a} = true;
a === Boolean.prototype.toString // true

上面代码中,数值和布尔值的包装对象都有tostring属性,因此变量s都能取到值。

解构赋值的规则是,只要等号右边的值不是对象或数组,就先将其转为对象。由于null和undefined无法转为对象,所以对它们进行解构赋值,都会报错。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
javascript里的条件判断
Feb 27 Javascript
封装了jQuery的Ajax请求全局配置
Feb 05 Javascript
js实现带有介绍的Select列表菜单实例
Aug 18 Javascript
Jquery日历插件制作简单日历
Oct 28 Javascript
JS获取文件大小方法小结
Dec 08 Javascript
JS实现环形进度条(从0到100%)效果
Jul 05 Javascript
项目实践一图片上传之form表单还是base64前端图片压缩(前端图片压缩)
Jul 28 Javascript
input 禁止输入特殊字符的四种实现方式
Aug 24 Javascript
Node.js中看JavaScript的引用
Apr 22 Javascript
Vue框架下引入ActiveX控件的问题解决
Mar 25 Javascript
js实现微信聊天效果
Aug 09 Javascript
Vue看了就会的8个小技巧
Jan 21 Vue.js
js图片放大镜效果实现方法详解
Oct 28 #Javascript
js a标签点击事件
Mar 30 #Javascript
JS+html5制作简单音乐播放器
Sep 13 #Javascript
TypeScript入门-接口
Mar 30 #Javascript
如何编写jquery插件
Mar 29 #jQuery
基于JavaScript实现瀑布流效果
Mar 29 #Javascript
Angular动态添加、删除输入框并计算值实例代码
Mar 29 #Javascript
You might like
php微信支付之APP支付方法
2015/03/04 PHP
用于自动添加Digg This!按钮的JavaScript
2006/12/23 Javascript
jquery 表单下所有元素的隐藏
2009/07/25 Javascript
简单常用的幻灯片播放实现代码
2013/09/25 Javascript
JS实现倒计时和文字滚动的效果实例
2014/10/29 Javascript
PHP实现的各种中文编码转换类分享
2015/01/23 Javascript
3种不同的ContextMenu右键菜单实现代码
2016/11/03 Javascript
Angular的模块化(代码分享)
2016/12/26 Javascript
Angular使用ng-messages与PHP进行表单数据验证
2016/12/28 Javascript
Bootstrap响应式导航由768px变成992px的实现代码
2017/06/15 Javascript
JavaScript30 一个月纯 JS 挑战中文指南(英文全集)
2017/07/23 Javascript
微信二次分享报错invalid signature问题及解决方法
2019/04/01 Javascript
arcgis.js控制地图地体的显示范围超出区域自动弹回(实现思路)
2021/01/28 Javascript
[47:45]Liquid vs OG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[01:06]DOTA2小知识课堂 Ep.02 吹风竟可解梦境缠绕
2019/12/05 DOTA
python操作ssh实现服务器日志下载的方法
2015/06/03 Python
Pycharm技巧之代码跳转该如何回退
2017/07/16 Python
Django中的Signal代码详解
2018/02/05 Python
Python yield与实现方法代码分析
2018/02/06 Python
使用pycharm生成代码模板的实例
2018/05/23 Python
OPENCV去除小连通区域,去除孔洞的实例讲解
2018/06/21 Python
Python重新加载模块的实现方法
2018/10/16 Python
Python3 安装PyQt5及exe打包图文教程
2019/01/08 Python
pycharm打开命令行或Terminal的方法
2019/01/16 Python
python操作日志的封装方法(两种方法)
2019/05/23 Python
Python音频操作工具PyAudio上手教程详解
2019/06/26 Python
解决python gdal投影坐标系转换的问题
2020/01/17 Python
python+gdal+遥感图像拼接(mosaic)的实例
2020/03/10 Python
深入解析HTML5 Canvas控制图形矩阵变换的方法
2016/03/24 HTML / CSS
毕业生简单求职信
2013/11/19 职场文书
计算机专业毕业生推荐信
2013/11/25 职场文书
学习保证书100字
2015/02/26 职场文书
小学体育组工作总结
2015/08/13 职场文书
解决python3安装pandas出错的问题
2021/05/20 Python
MySQL 外键约束和表关系相关总结
2021/06/20 MySQL
openstack云计算keystone组件工作介绍
2022/04/20 Servers