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 相关文章推荐
NiftyCube——轻松实现圆角边框
Feb 20 Javascript
豆瓣网的jquery代码实例
Jun 15 Javascript
JavaScript 继承机制的实现(待续)
May 18 Javascript
JQueryEasyUI datagrid框架的进阶使用
Apr 08 Javascript
jquery实现简单的拖拽效果实例兼容所有主流浏览器(优化篇)
Jun 28 Javascript
JS可以控制样式的名称写法一览
Jan 16 Javascript
jquery分页插件jpaginate在IE中不兼容问题
Apr 22 Javascript
JavaScript资源预加载组件和滑屏组件的使用推荐
Mar 10 Javascript
关于数据与后端进行交流匹配(点亮星星)
Aug 03 Javascript
基于vue通用表单解决方案的思考与分析
Mar 16 Javascript
vue实现可视化可拖放的自定义表单的示例代码
Mar 20 Javascript
uin-app+mockjs实现本地数据模拟
Aug 26 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解压缩zip和rar压缩包文件的方法
2019/07/10 PHP
laravel5.6框架操作数据curd写法(查询构建器)实例分析
2020/01/26 PHP
javascript demo 基本技巧
2009/12/18 Javascript
js下通过getList函数实现分页效果的代码
2010/09/17 Javascript
js去字符串前后空格5种实现方法及比较
2013/04/03 Javascript
通过JavaScript使Div居中并随网页大小改变而改变
2013/06/24 Javascript
javaScript 动态访问JSon元素示例代码
2013/08/30 Javascript
toggle一个div显示或隐藏且可扩展成自定义下拉框
2013/09/12 Javascript
jquery中邮箱地址 URL网站地址正则验证实例代码
2013/09/15 Javascript
js函数定时器实现定时读取系统实时连接数
2014/04/30 Javascript
jQuery实现数字加减效果汇总
2014/12/16 Javascript
不想让浏览器运行javascript脚本的方法
2015/11/20 Javascript
基于d3.js实现实时刷新的折线图
2016/08/03 Javascript
让编辑器支持word复制黏贴、截屏的js代码
2016/10/17 Javascript
浅谈事件冒泡、事件委托、jQuery元素节点操作、滚轮事件与函数节流
2017/07/22 jQuery
原生JS实现小小的音乐播放器
2017/10/16 Javascript
面试题:react和vue的区别分析
2019/04/08 Javascript
Vue 动态组件components和v-once指令的实现
2019/08/30 Javascript
浅探express路由和中间件的实现
2019/09/30 Javascript
Vue 微信端扫描二维码苹果端却只能保存图片问题(解决方法)
2020/01/19 Javascript
Vue中keep-alive 实现后退不刷新并保持滚动位置
2020/03/17 Javascript
JS数组降维的实现Array.prototype.concat.apply([], arr)
2020/04/28 Javascript
简单谈谈python的反射机制
2016/06/28 Python
python PyTorch参数初始化和Finetune
2018/02/11 Python
浅析Python 实现一个自动化翻译和替换的工具
2019/04/14 Python
使用python爬取微博数据打造一颗“心”
2019/06/28 Python
python3 webp转gif格式的实现示例
2019/12/10 Python
TensorFlow2.0矩阵与向量的加减乘实例
2020/02/07 Python
使用OpenCV去除面积较小的连通域
2020/07/05 Python
UGG雪地靴荷兰官网:UGG荷兰
2016/09/09 全球购物
文员个人的求职信范文
2013/09/26 职场文书
汽修专业自荐信
2014/07/07 职场文书
党的群众路线教育实践活动教师自我剖析材料
2014/10/09 职场文书
慰问信(范文3篇)
2019/10/23 职场文书
python文件目录操作之os模块
2021/05/08 Python
Win11 Build 22000.51版本文件资源管理器“命令栏”和上下文菜单有什么新变化?
2021/11/21 数码科技