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学习笔记(十六) 系统对话框(alert、confirm、prompt)
Jun 20 Javascript
js中window.open()的所有参数详细解析
Jan 09 Javascript
简介JavaScript中Math.cos()余弦方法的使用
Jun 15 Javascript
JavaScript清空数组元素的两种方法简单比较
Jul 10 Javascript
Bootstrap每天必学之表单
Nov 23 Javascript
three.js中3D视野的缩放实现代码
Nov 16 Javascript
关于HTTP传输中gzip压缩的秘密探索分析
Jan 12 Javascript
在 Typescript 中使用可被复用的 Vue Mixin功能
Apr 17 Javascript
小程序实现列表多个批量倒计时
Jan 29 Javascript
详解Vue源码中一些util函数
Apr 24 Javascript
vue实现手机端省市区区域选择
Sep 27 Javascript
jquery实现淡入淡出轮播图效果
Dec 13 jQuery
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检测文件编码的函数
2014/04/21 PHP
php获得客户端浏览器名称及版本的方法(基于ECShop函数)
2015/12/23 PHP
基于laravel Request的所有方法详解
2019/09/29 PHP
nicejforms——美化表单不用愁
2007/02/20 Javascript
JavaScript 开发规范要求(图文并茂)
2010/06/11 Javascript
JS对HTML标签select的获取、添加、删除操作
2013/10/17 Javascript
使用GruntJS构建Web程序之合并压缩篇
2014/06/06 Javascript
js实现编辑div节点名称的方法
2014/12/17 Javascript
jQuery-1.9.1源码分析系列(十一)DOM操作续之克隆节点
2015/12/01 Javascript
JavaScript利用HTML DOM进行文档操作的方法
2016/03/28 Javascript
每日十条JavaScript经验技巧(二)
2016/06/23 Javascript
JS实现页面中所有img对象添加onclick事件及新窗口查看图片的方法
2016/12/27 Javascript
jQuery实现的简单排序功能示例【冒泡排序】
2017/01/13 Javascript
详解vue.js之props传递参数
2017/12/12 Javascript
jQuery+Datatables实现表格批量删除功能【推荐】
2018/10/24 jQuery
Phaser.js实现简单的跑酷游戏附源码下载
2018/10/26 Javascript
angular中如何绑定iframe中src的方法
2019/02/01 Javascript
js中offset,client , scroll 三大元素知识点总结
2019/09/11 Javascript
JavaScript实现沿五角星形线摆动的小圆实例详解
2020/07/28 Javascript
[13:39]2014 DOTA2华西杯精英邀请赛 5 25 NewBee VS DK第一场
2014/05/26 DOTA
Python对象体系深入分析
2014/10/28 Python
详解python3百度指数抓取实例
2016/12/12 Python
linux环境下python中MySQLdb模块的安装方法
2017/06/16 Python
JSON文件及Python对JSON文件的读写操作
2018/10/07 Python
Python函数中不定长参数的写法
2019/02/13 Python
pyqt5 实现 下拉菜单 + 打开文件的示例代码
2019/06/20 Python
python 遍历pd.Series的index和value
2019/11/26 Python
Python DES加密实现原理及实例解析
2020/07/17 Python
利用HTML5绘制点线面组成的3D图形的示例
2015/05/12 HTML / CSS
德国孕妇装和婴童服装网上商店:bellybutton
2018/04/12 全球购物
彪马日本官网:PUMA日本
2019/01/31 全球购物
财务工作疏忽检讨书
2014/09/11 职场文书
装饰技术负责人岗位职责
2015/04/13 职场文书
golang判断key是否在map中的代码
2021/04/24 Golang
Tensorflow与RNN、双向LSTM等的踩坑记录及解决
2021/05/31 Python
js中Map和Set的用法及区别实例详解
2022/02/15 Javascript