es6(二):解构赋值

ES中允许按照一定格式从数组,对象值提取值对变量进行赋值,这就是解构(Destructuring)

1 let [a,b,c]=[1,10,100]
2     console.log(a,b,c)//1 10 100
3     //等式两边"模式"进行匹配,从而进行赋值
4     let [i,[[[j]],k]]=[1,[[[2]],3]]//这种看看就好,知道这样也可以执行就行
5     console.log(i,j,k)//1 2 3
6     
7     let [,,x]=[1,2,3]
8     console.log(x)//3

解构不成功,相应的变量为undefined

1 let [i1,i2]=[]
2     console.log(i1,i2)//undefined undefined
3     let [i3,i4]=[10]
4     console.log(i3,i4)//10 undefined

部分解构成功

1 let [i5,i6]=[1,2,3]
2     console.log(i5,i6)//1 2

等式右边不是可遍历的结构,那么将报错

1 let [i7,i8]=1 //1 is not iterable
2 let [i9] =true//true is not iterable

解构赋值允许指定默认值

1 let [i10,i11='hi']=[100]
2     console.log(i10,i11)//100 'hi'

注意这种情况

1 // let [i111=i12,i12=10]=[]//报错,i111=i12 此时i12还未申明
2     // 而:
3     let [i13=i14,i14]=[1,2]
4     console.log(i13,i14)

对象的解构赋值

 1 let {foo,bar}={foo:'name',bar:'age'}
 2     console.log(foo,bar)
 3     //但其实上面解构赋值是下面的缩写
 4     let {foo1:foo1,bar1:bar1}={foo1:'name',bar1:'age'}
 5     console.log(foo1,bar1)
 6     // 如果继续变换
 7     let {foo2:name,bar2:age}={foo2:'name',bar2:'age'}
 8     // console.log(foo2,bar2)//报错
 9     console.log(name,age)//正确写法
10     // 即foo2是模式,name才是赋值的变量

运行结果:

解构赋值的几大应用:

1.交换变量

1 let a10=10,b100=100;
2     [a10,b100]=[b100,a10]
3     console.log(a10,b100)//100 10

2.函数返回中取出多个值

 1 function test10(){
 2       return [1,2,3]
 3     }
 4     function test100(){
 5       return {
 6         nameT:'apple',
 7         ageT:100
 8       }
 9     }
10     let [j1,j2,j3]=test10()
11     console.log(j1,j2,j3)//1 2 3 
12     let {nameT,ageT}=test100()
13     console.log(nameT,ageT) //'apple' 100

3.提取JSON数据

1 function getJSON(){
2       return {
3         "app1":100,
4         "blue":"hello blue",
5         "data": 110
6       }
7     }
8     let {app1,blue,data:number}=getJSON()
9     console.log(app1,blue,number)//100 "hello blue" 110

参考阮一峰ECMASCript入门

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏我是攻城师

Scala中的case match语法

2703
来自专栏IT可乐

Java数据结构和算法(十三)——哈希表

  Hash表也称散列表,也有直接译作哈希表,Hash表是一种根据关键字值(key - value)而直接进行访问的数据结构。它基于数组,通过把关键字映射到数组...

3028
来自专栏debugeeker的专栏

《coredump问题原理探究》Linux x86版6.3节有成员变量的类coredump例子

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xuzhina/article/detai...

1341
来自专栏marsggbo

c++学习笔记之继承篇

一 继承方式 public ? protected ? private ? 二 多继承和多重继承 举个例子就明白了 多继承 :农民工就算是多继承。 graph...

2345
来自专栏从流域到海域

《笨办法学Python》 第38课手记

《笨办法学Python》 第38课手记 注意这是第三版的《笨办法学Python》的内容,我后来发现第三版存在很大的问题,就放弃了第三版开始使用第四版,第四版的第...

3308
来自专栏程序员互动联盟

【编程基础】C++比C牛逼的七个点

1. 函数检测增强 ? 在C语言中,重复定义多个同名的全局变量是合法的,在C++中,不允许定义多个同名的全局变量。 C语言中多个同名的全局变量最终会被链接到全局...

3495
来自专栏数据结构与算法

1470 数列处理

个人博客:doubleq.win 1470 数列处理  时间限制: 1 s  空间限制: 1000 KB  题目等级 : 青铜 Bronze 题解 题目描述 D...

2715
来自专栏用户2442861的专栏

Python之逻辑运算和缩进和选择if

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢!

731
来自专栏梧雨北辰的开发录

Swift学习:泛型

本篇将详细总结介绍Swift泛型的用法; Swift泛型代码让你能够根据自定义的需求,编写出适用于任意类型、灵活可重用的函数及类型。它能让你避免代码的重复,用...

882
来自专栏和蔼的张星的图像处理专栏

174. 删除链表中倒数第n个节点双指针

给定一个链表,删除链表中倒数第n个节点,返回链表的头节点。 样例 给出链表1->2->3->4->5->null和 n = 2. 删除倒数第二个节点之后,...

642

扫码关注云+社区

领取腾讯云代金券