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 相关文章推荐
Firefox+FireBug使JQuery的学习更加轻松愉快
Jan 01 Javascript
jquery select动态加载选择(兼容各种浏览器)
Feb 01 Javascript
jQuery与getJson结合的用法实例
Aug 07 Javascript
详解JavaScript数组的操作大全
Oct 19 Javascript
jQuery中cookie插件用法实例分析
Dec 04 Javascript
WordPress中利用AJAX技术进行评论提交的实现示例
Jan 12 Javascript
第九篇Bootstrap导航菜单创建步骤详解
Jun 21 Javascript
Bootstrap轮播图学习使用
Feb 10 Javascript
Bootstrap表单控件学习使用
Mar 07 Javascript
微信JS SDK接入的几点注意事项(必看篇)
Jun 23 Javascript
JS非行间样式获取函数的实例代码
Jun 05 Javascript
微信小程序实现购物车代码实例详解
Aug 29 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小技巧之JS和CSS优化工具Minify的使用方法
2014/05/19 PHP
ThinkPHP 表单自动验证运用示例
2014/10/13 PHP
PHP下载远程图片的几种方法总结
2017/04/07 PHP
php usort 使用用户自定义的比较函数对二维数组中的值进行排序
2017/05/02 PHP
PHP多种序列化/反序列化的方法详解
2017/06/23 PHP
使用Firebug对js进行断点调试的图文方法
2011/04/02 Javascript
Jquery中国地图热点效果-鼠标经过弹出提示层信息的简单实例
2014/02/12 Javascript
AngularJS入门知识之MVW类框架的编程思想探讨
2014/12/08 Javascript
JavaScript监听文本框回车事件并过滤文本框空格的方法
2015/04/16 Javascript
javascript原生ajax写法分享
2016/04/10 Javascript
Bootstrap模仿起筷首页效果
2016/05/09 Javascript
JavaScript 函数节流详解及方法总结
2017/02/09 Javascript
Spring Boot+AngularJS+BootStrap实现进度条示例代码
2017/03/02 Javascript
canvas简单快速的实现知乎登录页背景效果
2017/05/08 Javascript
JS实现十字坐标跟随鼠标效果
2017/12/25 Javascript
vue项目中jsonp跨域获取qq音乐首页推荐问题
2018/05/30 Javascript
vue中锚点的三种方法
2018/07/06 Javascript
vue基础之事件简写、事件对象、冒泡、默认行为、键盘事件实例分析
2019/03/11 Javascript
vue列表单项展开收缩功能之this.$refs的详解
2019/05/05 Javascript
JS实现从对象获取对象中单个键值的方法示例
2019/06/05 Javascript
Nodejs实现图片上传、压缩预览、定时删除功能
2019/10/25 NodeJs
three.js利用gpu选取物体并计算交点位置的方法示例
2019/11/25 Javascript
JavaScript单线程和任务队列原理解析
2020/02/04 Javascript
react ant Design手动设置表单的值操作
2020/10/31 Javascript
Python的迭代器和生成器
2015/07/29 Python
Python算术运算符实例详解
2017/05/31 Python
python中turtle库的简单使用教程
2020/11/11 Python
HTML5画渐变背景图片并自动下载实现步骤
2013/11/18 HTML / CSS
医科学校毕业生自荐信
2013/11/09 职场文书
甜美蛋糕店创业计划书
2014/01/30 职场文书
房产公证委托书范本
2014/09/20 职场文书
班主任自我评价范文
2015/03/11 职场文书
总经理致辞
2015/07/29 职场文书
《雷雨》教学反思
2016/02/20 职场文书
2019年怎样才能撰写出优秀的自荐信
2019/03/25 职场文书
导游词之扬州大明寺
2019/10/09 职场文书