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入门教程(5) js Screen屏幕对象
Jan 31 Javascript
JS获取父节点方法
Aug 20 Javascript
基于jQuery全屏焦点图左右切换插件responsiveslides
Sep 07 Javascript
jQuery EasyUi实战教程之布局篇
Jan 26 Javascript
JavaScript实现带播放列表的音乐播放器实例分享
Mar 07 Javascript
Vue.js系列之项目结构说明(2)
Jan 03 Javascript
ES6中Math对象的部分扩展
Feb 20 Javascript
JS给按钮添加跳转功能类似a标签
May 30 Javascript
JS中call和apply函数用法实例分析
Jun 20 Javascript
layui使用label标签的方法
Sep 14 Javascript
antd的select下拉框因为数据量太大造成卡顿的解决方式
Oct 31 Javascript
利用前端HTML+CSS+JS开发简单的TODOLIST功能(记事本)
Apr 13 Javascript
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中使用Sockets 从Usenet中获取文件
2008/01/10 PHP
php生成SessionID和图片校验码的思路和实现代码
2009/03/10 PHP
Referer原理与图片防盗链实现方法详解
2019/07/03 PHP
js下通过getList函数实现分页效果的代码
2010/09/17 Javascript
jQuery滚动条插件nanoscroller使用指南
2015/04/21 Javascript
jQuery简单实现验证邮箱格式
2015/07/15 Javascript
JS实现alert中显示换行的方法
2015/12/17 Javascript
javascript基础知识
2016/06/07 Javascript
vue之数据交互实例代码
2017/06/16 Javascript
jquery easyui如何实现格式化列
2017/07/30 jQuery
[js高手之路]寄生组合式继承的优势详解
2017/08/28 Javascript
详解Vue双向数据绑定原理解析
2017/09/11 Javascript
Angular 数据请求的实现方法
2018/05/07 Javascript
Vue父子组件双向绑定传值的实现方法
2018/07/31 Javascript
javascript数组常见操作方法实例总结【连接、添加、删除、去重、排序等】
2019/06/13 Javascript
[53:52]EG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[01:00] DOTA2英雄背景故事第五期之重力引力法则谜团
2020/07/16 DOTA
pytorch 数据集图片显示方法
2018/07/26 Python
Python脚本按照当前日期创建多级目录
2019/03/01 Python
Python Tkinter 简单登录界面的实现
2019/06/14 Python
Python求两点之间的直线距离(2种实现方法)
2019/07/07 Python
Python使用Socket实现简单聊天程序
2020/02/28 Python
如何利用Python matplotlib绘制雷达图
2020/12/21 Python
CSS3圆角和渐变2种常用功能详解
2016/01/06 HTML / CSS
W Concept美国:精选全球独立设计师
2017/02/22 全球购物
中间件分为哪几类
2012/03/14 面试题
幼儿园中班教学反思
2014/02/10 职场文书
教育技术学专业职业规划书
2014/03/03 职场文书
售房委托书
2014/08/30 职场文书
2014年实习期工作总结
2014/11/27 职场文书
答谢词范文
2015/01/05 职场文书
元宵节寄语大全
2015/02/27 职场文书
小学生五一劳动节演讲稿
2015/03/18 职场文书
中小学生安全教育观后感
2015/06/17 职场文书
2015小学师德工作总结
2015/07/21 职场文书
母亲节主题班会
2015/08/14 职场文书