1、什么是解构赋值
ES6允许按照预定的模式,从数组、对象中提取值,对变量进行赋值。
我们直接用例子说明。
 
 2. 数组的解构赋值
数组传统的变量赋值:
     var arr=[1,2,3];
     var a=arr[0];
     var b=arr[1];
     var c=arr[2];
     console.log(a);   //1
     console.log(b);  //2
     console.log(c);  //3
 
数组的解构赋值:
     var arr[a,b,c]=[1,2,3];
     console.log(a);   //1
     console.log(b);  //2
     console.log(c);  //3
 
数组解构赋值的几种情况:
(1)数值中嵌套数组
     var arr[a,b, [c,d]]=[1,2,[3,4]];
     console.log(a);   //1
     console.log(b);  //2
     console.log(c);  //3
     console.log(4);  //4
(2) 不完成解构
     var arr[a,b, c]=[1,2];
     console.log(a);   //1
     console.log(b);  //2
     console.log(c);  //undefined
(3) 设置默认值
     var arr[a,b, c=3]=[1,2];
     console.log(a);   //1
     console.log(b);  //2
     console.log(c);  //3
(4) 修改默认值
     var arr[a,b, c=3]=[1,2,4];
     console.log(a);   //1
     console.log(b);  //2
     console.log(c);  //4
 
2. 对象的解构赋值
     var {a,b,c}={"a":1,"b":2,"c":3};
     console.log(a);   //1
     console.log(b);  //2
     console.log(c);  //3
与数组的解构赋值不同之处:数组中按顺序赋值,而对象是按属性名赋值。例:
     var {a,b,c,d}={"a":1,"c":2,"b":3,"e":4};
     console.log(a);   //1
     console.log(b);  //3
     console.log(b);  //2
     console.log(d);  //undefined
这时,我们可以做出修改,使d取得e的赋值: var {a,b,c,d:e}={"a":1,"c":2,"b":3,"e":4}; (将e赋值给d)
 
(1)对象的嵌套赋值
     var {a:{b}}={"a":{"b":1}}
     console.log(a);   //报错
     console.log(b);   //1
(2)指定默认值
     var {a,b=2}={"a":1}
     console.log(a);   //1
     console.log(b);   //2
(3)字符串的解构赋值
     var {a,b}='你好';
     console.log(a);   //你
     console.log(b);   //好
 
3. 解构赋值的作用
(1)交换数值:不必引入中间的临时变量
     var x=1;
     var y=2;
     [x,y]=[y,x];
(2)提取函数返回的多个值:(函数只能有一个返回值,将多个值放在数组或对象中返回)
     function demo(){
          return {"name":"a","age":"15"};
     }
     var {name,age}=demo();
     console.log(name);  //a
     console.log(age);  //15
(3)定义函数参数:(只获取需要的参数,忽略多余的参数)
     function demo(a,b){  
          console.log("name:"+a);  //name:haha
          console.log("age:"+b);  //age:16
     }
     demo(a:"haha",b:"16",c:"160cm");
(4)设置函数参数的默认值
        传统的设置参数默认值:
     function demo(a){  
          var name;
          if(a===undefined){
               name="haha";
          }else{
               name=a;
          }
          console.log(name); 
     }
       解构赋值设置参数默认值:
     function demo({name="haha"}){  
          console.log(name);    
     }
     demo({});   //haha
     demo({name:"aa"})  //aa
 
 
 
 
 
 
—————————————————————————
参考公众号:web前端教程
 
 

ES6—解构赋值的更多相关文章

  1. ES6解构赋值

    前面的话 我们经常定义许多对象和数组,然后有组织地从中提取相关的信息片段.在ES6中添加了可以简化这种任务的新特性:解构.解构是一种打破数据结构,将其拆分为更小部分的过程.本文将详细介绍ES6解构赋值 ...

  2. es6 解构赋值

    ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). 关于给变量赋值,传统的变量赋值是这样的: var arr = [1,2,3];//把数组的值 ...

  3. (2)ES6解构赋值-数组篇

    1.解构赋值-数组篇 //Destrcturing(解构) //ES5 /* var a = 1; var b = 2; var c = 3; */ //ES6 var [a,b,c] = [1,2, ...

  4. es6 解构赋值 新认知/新习惯

    es6 的解构赋值其实很早就学习了,但一直纠结于习惯和可读性问题,所以没有大规模使用.最近被 react调教一番之后.已经完全融入认知和习惯中去了.总结一下三个常用的技巧: 对象取值 取值并重命名 剩 ...

  5. 简单看看es6解构赋值

    哎,我真的是太难了,今天就被这个解构赋值(也可以叫做析构,貌似析构是在c++中的,所以我这里叫做解构赋值吧)弄的我很烦,本来以为很容易的,结果还是弄了好久...就总结一下解构吧! 1.解构的基本使用 ...

  6. ES6解构赋值常见用法

    解构赋值出现的契机: let obj = { a: 1, b: 2 } // 取值 let a = obj.a let b = obj.b 问题核心: 每次取值既要确定对象属性名,还得重新定义一个变量 ...

  7. ES6 解构赋值详解

    解构赋值是对赋值运算符的扩展,可以将属性/值从对象/数组中取出,赋值给其他变量. 一.数组的解构赋值 1.基本用法 只要等号两边的模式相同,左边的变量就会被赋予对应的值. let [a, [[b], ...

  8. 【ES6 】ES6 解构赋值--数组解构赋值

    定义 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构 数组的解构赋值 以前,为变量赋值,只能直接指定值. let a = 1; let b = 2; let c = 3; ...

  9. ES6解构赋值详解

    文章转载自:http://www.zhufengpeixun.cn/article/167 解构赋值(destructuring assignment)语法是一个 Javascript 表达式,这种语 ...

随机推荐

  1. 12.Object-C--浅谈OC的内存管理机制

    昨天学习了OC的内存管理机制,今天想总结一下,所以接下来我要在这里bibi一下:OC的内存管理. 首先我要说的是,内存管理的作用范围. 内存管理的作用范围: 任何继承了NSObject的对象,对其他基 ...

  2. 在虚拟机上安装Ubutu完成后卡在VM Tool的安装上

    今天在虚拟机上装Ubuntu之后,卡在了VM Tool的安装页,点击回车后可以进入命令行模式.并出现如下提示“Vmware Easy Install PLEASE WAIT! VMware Tools ...

  3. Oracle 11g 安装

    1.Oracle 11g安装: http://www.cnblogs.com/qianyaoyuan/archive/2013/05/05/3060471.html 2.安装完Oracle数据库,给s ...

  4. AOP面向切面编程

    1.AOP Aop(aspect object programming)面向切面编程 功能: 让关注点代码与业务代码分离! 关注点 重复代码就叫做关注点: 切面 关注点形成的类,就叫切面(类)! 面向 ...

  5. Chart For Asp.Net ----Overview

    一个图表有很多元素构成,所有元素都能通过图表API控制.图表API是面向对象的,可扩展的,高复用的.支持很多图表元素如:data series,data points in a series,char ...

  6. Matlab与C/C++联合编程之Matlab以MEX方式调用C/C++代码(一)

    MEX文件是一种可在matlab环境中调用的C语言(或fortran)衍生程序,mex的编译结果实际上就是一个带输出函数mexFunction 的dll文件. 中文名 mex文件 外文名 MATLAB ...

  7. Math 对象的方法

    Math 对象的方法 方法 描述 abs(x) 返回数的绝对值 acos(x) 返回数的反余弦值 asin(x) 返回数的反正弦值 atan(x) 以介于 -PI/2 与 PI/2 弧度之间的数值来返 ...

  8. Ubuntu 14.10 下安装Synergy,不同电脑之间公用一套键盘鼠标

    因为工作时候有多台电脑放在一起,如果每个用一套键盘鼠标很是不方便,所以希望能够不用电脑之间公用一套键盘鼠标. Synergy可以实现不同电脑之间公用一套键盘鼠标,并且支持简单的复制粘贴.很好用. 它还 ...

  9. windows程序设计笔记

    2014.05.06 新建一个visual C++ -- 常规 -- 空白 的项目,用.c后缀名指定这是一个用C语言来写的windows项目.和C语言的hellworld程序做了一个比较,按照wind ...

  10. 使用respondsToSelector:来发现对象是否响应消息

    发现对象是否响应消息 要发现一个对象是否响应一则消息,请在该对象上调用 respondsToSelector: 方法.应用程序代码通常验证一个对象响应一则消息后,才将消息发送给该对象. if ([it ...