变量的解构赋值

ES6中允许按照一定模式,从数组和对象中提取,对变量进行赋值。
数组的解构赋值
var [a,b,c] = [1,2,3]; a // 1; b // 2; c // 3;
上面的代码标示可以从数组中提取值,按照位置的对应关系对变量进行赋值。
本质上,这种写法属于“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值。
let [foo,[[bar],baz]] = [1,[[2],3]]; foo //1; bar //2; baz //3; let [,,third] = ['foo','bar','baz']; third //'baz' let [head,...tail] = [1,2,3,4] head //1; tail //[2,3,4]
如果解构不成功,变量的值就等于undefined。
let [x,y,z] = ['a'] x // 'a'; y // undefined z //[]
不完全解构
如果等号左边的模式只匹配等号右边数组的一部分,解构依然可以成功,这种情况叫做不完全解构。
let [x,y] = [1,2,3] x //1 y //2
如果等号右边不是数组,那么将会报错。(不具备可遍历的结构)。
只要某种数据结构具有Iterator接口,都可以采用数组形式的解构赋值
function* fibs(){
var a = 0;
var b = 1;
while(true){
yield a;
[a,b] = [b,a+b];
}
}
var [first,second,third,fourth,fifth,sixth] = fibs();
sixth // 5
fibs是一个Generator函数,原生具有Iterator接口,解构赋值会依次从这个接口获取值。
默认值
解构赋值允许指定默认值。
var [foo=true] = []; foo //true
ES6内部使用严格相等于运算符(===)判断一个位置是否有值。所以,一个数组成员如果不严格等于undefined,默认值便不会生效。
var [x = 1] = [undefined] x // 1 var [x = 1] = [null] x // null
表达式也可以作为默认值,如果表达式作为默认值的时候,该表达式是惰性求值的,只有在用到的时候才会求值。
function f(){
console.log('aaa')
}
let [x = f()] = [1]
在上面的代码中,函数f不会执行,是因为x能取到值。
默认值可以引用解构赋值的其他变量,但该变量必须已经声明。
对象的解构赋值
解构赋值可以应用在数组上,同样也可以用于对象。
var {foo,bar} = {foo:'aaa',bar:'bbb'}
foo // 'aaa'
bar // 'bbb'
对象的解构赋值与数组有一个不同点,就是数组的元素是按次序排序的,变量的取值由它的位置决定,而对象的属性没有次序,变量必须与属性同名,才能取到正确的值。
var {bar,foo} = {foo:'aaa',bar:'bbb'}
foo //'aaa'
bar //'bbb'
var {baz} = {foo:'aaa',bar:'bbb'}
baz //undefined
如果变量名与属性名不一致,那必须写成这样:
var {foo:baz} = {foo:'aaa'}
baz //'aaa'
实际上对象的解构赋值是以下的形式简写:
var {foo:foo,bar:bar} = {foo:'aaa',bar:'bbb'}
对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量,真正被赋值的是后者,而不是前者。
但是,采取上面的写法时,变量的声明和赋值是一起的,对于let和const而言,变量不能重新声明,所以一旦赋值的变量以前声明过,就会报错。
对象的解构也可以用于嵌套结构的对象。
var obj = {
p: [
'hello' ,
{
y : 'world'
}
]
}
var {p:[x,{y}]} = obj
x //'hello'
y //'world'
这时p是模式,不是变量,因此不会被赋值。
对象的解构赋值也可以指定默认值,默认值的生效条件是,对象的属性值严格等于undefined。
var {x=3} = {x:undefined}
x //3
var {x=3} = {x:null}
x //null
如果解构模式是嵌套对象,而且子对象所在的父属性不存在,那么将会报错。
var {foo:{bar}} = {baz:'baz'}
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者使用ES6能带来一定的帮助,如果有疑问大家可以留言交流。
# es6解构赋值
# es6
# 变量解构
# 变量的解构赋值
# ES6数组与对象的解构赋值详解
# ES6 解构赋值的原理及运用
# ES6解构赋值实例详解
# ES6 对象的新功能与解构赋值介绍
# 详解JS ES6变量的解构赋值
# ES6解构赋值的功能与用途实例分析
# ES6的解构赋值实例详解
# ES6中解构赋值的语法及用法实例
# 默认值
# 报错
# 就会
# 将会
# 不完全
# 的是
# 是一个
# 是因为
# 求值
# 才会
# 遍历
# 数据结构
# 不存在
# 然后再
# 这种情况
# 在上面
# 这篇文章
# 用在
# 不具备
# 就等于
相关文章:
如何在腾讯云服务器快速搭建个人网站?
制作证书网站有哪些,全国城建培训中心证书查询官网?
网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?
高端智能建站公司优选:品牌定制与SEO优化一站式服务
建站10G流量真的够用吗?如何应对访问高峰?
如何确认建站备案号应放置的具体位置?
如何彻底卸载建站之星软件?
如何用wdcp快速搭建高效网站?
成都网站制作公司哪家好,四川省职工服务网是做什么用?
网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?
网站制作的步骤包括,正确网址格式怎么写?
如何选择可靠的免备案建站服务器?
网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?
如何快速生成高效建站系统源代码?
如何快速搭建高效WAP手机网站?
广州顶尖建站服务:企业官网建设与SEO优化一体化方案
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
齐河建站公司:营销型网站建设与SEO优化双核驱动策略
广州网站建站公司选择指南:建站流程与SEO优化关键词解析
如何快速搭建高效简练网站?
Bpmn 2.0的XML文件怎么画流程图
如何通过可视化优化提升建站效果?
Swift中swift中的switch 语句
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
制作营销网站公司,淘特是干什么用的?
如何快速登录WAP自助建站平台?
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
如何快速建站并高效导出源代码?
企业网站制作公司网页,推荐几家专业的天津网站制作公司?
c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】
Thinkphp 中 distinct 的用法解析
专业网站建设制作报价,网页设计制作要考什么证?
如何在自有机房高效搭建专业网站?
网站专业制作公司有哪些,做一个公司网站要多少钱?
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
b2c电商网站制作流程,b2c水平综合的电商平台?
建站之星伪静态规则如何正确配置?
威客平台建站流程解析:高效搭建教程与设计优化方案
如何做网站制作流程,*游戏网站怎么搭建?
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
手机怎么制作网站教程步骤,手机怎么做自己的网页链接?
如何在云虚拟主机上快速搭建个人网站?
上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?
教学网站制作软件,学习*后期制作的网站有哪些?
如何获取免费开源的自助建站系统源码?
如何用虚拟主机快速搭建网站?详细步骤解析
建站主机SSH密钥生成步骤及常见问题解答?
黑客入侵网站服务器的常见手法有哪些?
如何高效完成自助建站业务培训?
*请认真填写需求信息,我们会在24小时内与您取得联系。