--解构赋值--

概述

  • 解构赋值是对赋值运算符的扩展。
  • 是一种针对数组或者对象进行模式匹配,然后对其中的变量进行赋值。
  • 在代码书写上简洁且易读,语义更加清晰明了;也方便了复杂对象中数据字段获取。

通俗的来讲:解析数据源,然后按照数据模型进行取值,再赋值给变量

 

 

let obj={a:100,b:"hello",c:[10,203,0]

let {a,b,c}=obj就是解构赋值

//隐式操作:let  a=obj.a;let b=obj.b;let c=obj.c

 

结构模型:

变量修饰符  数据模型=数据源

 

解构:

按照数据模型取出数据源中的数据,赋值:然后赋值给模型变量

 

 

做个练习吧:

 

  •  写出var [name,{age}]=arr的隐式操作

//var a=arr[0], var b=arr[1], var c=arr[2]

 

  1.  写出var [a,b,c]=arr的隐式操作

//var name=arr[0],var age=arr[1].age

 

 

 

     打印10,因为解构赋值其实是有两步隐式操作的,第一步: let a=10;第二步: let a=obj.a 此时obj.a是undefined所以原先的值没有被覆盖,就是其默认值。

 

 

    如果我们给obj.a赋一个值,那麽此时打印a的话,之前a=10的值就被覆盖了,变更成了20,所以打印20.

 

 

      如果我们将的值改为undefined呢?此时打印的还是10。这就是ES6解构赋值的一个bag,这里并不是obj.a没有值,而恰巧的是obj.a的值变成了undefined,这也是矛盾点所在。所以此时的情况就变成了第一个情况,obj.a的值是undefined所以其默认值没有被覆盖,还是10.

 

总结:赋值为没有意义得值时,只要值不是undefined,赋值为0null都可以实现值得覆盖。

 

复杂的解构赋值:

 

写出隐式操作

 

 

     对于这种复杂的解构赋值,唯一的解法就是一层一层的解。我们要打印出its

首先最外面是一个数组,所以要用下标取出来,下标取0,取出来的是一个对象;然后用点语法取出its: let its=data[0].its

 

加深难度,如果我们要取a呢?

  a在its数组内,所以要用取下标的方法取出来: let a=data[0].its[0]

 

在加深难度,我们如果要取出b呢?

b是嵌套在its数组中的一个对象,所以我们要用点语法取:let b=data[0].its[1].b

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值