ES中允许按照一定格式从数组,对象值提取值对变量进行赋值,这就是解构(Destructuring)
 let [a,b,c]=[1,10,100]
console.log(a,b,c)//1 10 100
//等式两边"模式"进行匹配,从而进行赋值
let [i,[[[j]],k]]=[1,[[[2]],3]]//这种看看就好,知道这样也可以执行就行
console.log(i,j,k)//1 2 3 let [,,x]=[1,2,3]
console.log(x)//
解构不成功,相应的变量为undefined
 let [i1,i2]=[]
console.log(i1,i2)//undefined undefined
let [i3,i4]=[10]
console.log(i3,i4)//10 undefined
部分解构成功
 let [i5,i6]=[1,2,3]
console.log(i5,i6)//1 2
等式右边不是可遍历的结构,那么将报错
 let [i7,i8]=1 //1 is not iterable
let [i9] =true//true is not iterable
解构赋值允许指定默认值
 let [i10,i11='hi']=[100]
console.log(i10,i11)//100 'hi'
注意这种情况
 // let [i111=i12,i12=10]=[]//报错,i111=i12 此时i12还未申明
// 而:
let [i13=i14,i14]=[1,2]
console.log(i13,i14)
对象的解构赋值
 let {foo,bar}={foo:'name',bar:'age'}
console.log(foo,bar)
//但其实上面解构赋值是下面的缩写
let {foo1:foo1,bar1:bar1}={foo1:'name',bar1:'age'}
console.log(foo1,bar1)
// 如果继续变换
let {foo2:name,bar2:age}={foo2:'name',bar2:'age'}
// console.log(foo2,bar2)//报错
console.log(name,age)//正确写法
// 即foo2是模式,name才是赋值的变量

运行结果:

解构赋值的几大应用:
1.交换变量
 let a10=10,b100=100;
[a10,b100]=[b100,a10]
console.log(a10,b100)//100 10
2.函数返回中取出多个值
 function test10(){
return [1,2,3]
}
function test100(){
return {
nameT:'apple',
ageT:100
}
}
let [j1,j2,j3]=test10()
console.log(j1,j2,j3)//1 2 3
let {nameT,ageT}=test100()
console.log(nameT,ageT) //'apple' 100
3.提取JSON数据
 function getJSON(){
return {
"app1":100,
"blue":"hello blue",
"data": 110
}
}
let {app1,blue,data:number}=getJSON()
console.log(app1,blue,number)//100 "hello blue" 110

参考阮一峰ECMASCript入门

es6(二):解构赋值的更多相关文章

  1. ES6 的解构赋值前每次都创建一个对象吗?会加重 GC 的负担吗?

    本文来源于知乎上的一个提问. 为了程序的易读性,我们会使用 ES6 的解构赋值: function f({a,b}){} f({a:1,b:2}); 这个例子的函数调用中,会真的产生一个对象吗?如果会 ...

  2. ES6变量解构赋值

    ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构ES6之前我们申明多个变量需要按照下面的方法: let l a=1; let b=2; let c=3; let d=4; ...

  3. ES6变量解构赋值的用法

    一.数组赋值(从数组中提取值,按照对应位置,对变量赋值) 1. 完全解构(变量与值数目相等) let arr = [1, 2, 3]; let [a,b,c] = arr; console.log(a ...

  4. es6 -- 与解构赋值默认值结合使用

    参数默认值可以与解构赋值的默认值,结合起来使用. function foo({x, y = 5}) { console.log(x, y) } foo({}) // undefined 5 foo({ ...

  5. ES6语法~解构赋值、箭头函数、class类继承及属性方法、map、set、symbol、rest、new.target、 Object.entries...

    2015年6月17日 ECMAScript 6发布正式版本 前面介绍基本语法,  后面为class用法及属性方法.set.symbol.rest等语法. 一.基本语法:  1.         定义变 ...

  6. ES6之解构赋值

    截止到ES6,共有6种声明变量的方法,分别是var .function以及新增的let.const.import和class: 我们通常的赋值方法是: var foo='foo'; function ...

  7. 进军es6(2)---解构赋值

    本该两周之前就该总结的,但最近一直在忙校招实习的事,耽误了很久.目前依然在等待阿里HR面后的结果中...但愿好事多磨!在阿里的某轮面试中面试官问到了es6的掌握情况,说明es6真的是大势所趋,我们更需 ...

  8. ES6-个人学习笔记二--解构赋值

    第二期,解构赋值如果能够熟练应用确实是个十分方便的功能,但是过分的依赖和嵌套只会让代码理解和维护起来十分困难,是个体现高逼格的表达式呢~ 1,解构赋值的基础 //定义:es6运行按照一定模式,从数组或 ...

  9. es6的解构赋值学习(1)

    相对es5的简单的"="赋值来说,es6增加了一种新的赋值模式--解构赋值,按照它的规则,可以从数组和对象中提取值来对变量进行赋值,个人觉得方便了很多,但是这个模式有点恶心人,相比 ...

  10. Es6 新增解构赋值

    1.数组的解构赋值 基本用法 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). 要想实现解构,就必须是容器,或者具有可遍历的接口. 以前,为 ...

随机推荐

  1. java设计模式---合成模式2

    合成模式属于对象的结构模式,有时又叫做"部分--整体"模式.合成模式将对象组织到树结构中,可以用来描述整体与部分的关系.合成模式可以使客户端将单纯元素与复合元素同等看待. 合成模式 ...

  2. Unity StrangeIoC HelloWorld

    unity有一个叫StrangeIoC的框架插件,这里写了一个使用StrangeIoC的HelloWorld,比他自带的demo更为简单,方便理解 1.插件下载,在Asset Store直接搜索Str ...

  3. javascript之prototype原型属性案例

    练习: 给字符串对象添加一个toCharArray的方法,然后再添加一个reverse(翻转)的 方法 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML ...

  4. 16_Android生命周期再介绍,通过androidconfigChanges属性让界面旋转时不改变状态中保留的值

     A  android:configChanges属性 对android:configChanges属性,一般认为有以下几点: 1 不设置Activity的android:configChange ...

  5. Gradle 1.12用户指南翻译——第二十一章. Gradle 插件

    昨天晚上只顾着和女朋友看<匆匆那年>电视剧的最后几集,所以说好的Android文档<Gradle 插件用户指南>第五章自然也没翻译多少.所以今天也发不了第五章的翻译了,就发几个 ...

  6. 【翻译】Ext JS最新技巧

    原文:Top Support Tips Mitchell Simoens:控制滚动指示器的自动隐藏 Sencha Touch有一个跨平台的,在所有平台看起来和工作效果都一样的滚动条.两条轴(x和y,水 ...

  7. (十八)TableView实践(多组汽车品牌展示)

    对于多组数据,可能会用到模型的嵌套. 例如多组汽车,每组是一个模型,组内有多辆车的信息,每辆车的信息也是一个模型,相当于模型中有模型. 可以看到,每个item是一个字典,这要创建一个模型,而模型内部的 ...

  8. C语言中sizeof与strlen区别

    本文转载自:http://www.2cto.com/kf/201109/105100.html 1. 以字符串形式出现的,编译器都会为该字符串自动添加一个0作为结束符,如在代码中写"abc& ...

  9. mysql进阶(十八)完全卸载mysql数据库图文教程

    完全卸载mysql数据库图文教程 有时候MySQL不能完全卸载,这时候必须通过一些途径删除掉注册表和一些残余的文件,然后才能重新安装才可以成功! 方法/步骤 1.控制面板-->所有控制面板项-- ...

  10. android 自定义下拉菜单

    本实例的自定义下拉菜单主要是继承PopupWindow类来实现的弹出窗体,各种布局效果可以根据自己定义设计.弹出的动画效果主要用到了translate.alpha.scale,具体实现步骤如下: 先上 ...