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. sdut 2609 A-Number and B-Number

    http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2609 数位DP 以前没怎么做过,自己憋了半天, ...

  2. 【未完成0.0】Noip2012提高组day2 解题报告

    第一次写一套题的解题报告,感觉会比较长.(更新中Loading....):) 题目: 第一题:同余方程 描述 求关于x的同余方程ax ≡ 1 (mod b)的最小正整数解. 格式 输入格式 输入只有一 ...

  3. IT公司100题-11-求二叉树中节点的最大距离

    问题描述: 写程序,求一棵二叉树中相距最远的两个节点之间的距离. 10/     \6      14/   \   /   \4    8 12    16 分析: 二叉树中最远的两个节点,要么是根 ...

  4. C++-模板的声明和实现为何要放在头文件中

    源: http://blog.csdn.net/lqk1985/archive/2008/10/24/3136364.aspx 如何组织编写模板程序 发表日期: 1/21/2003 12:28:58 ...

  5. android button text属性中英文大小写问题

    Android版本升级的原因,需要手动添加属性android:textAllCaps="false"

  6. (转)iOS应用架构谈 view层的组织和调用方案

    前言 <iOS应用架构谈 开篇>出来之后,很多人来催我赶紧出第二篇.这一篇文章出得相当艰难,因为公司里的破事儿特别多,我自己又有点私事儿,以至于能用来写博客的时间不够充分. 现在好啦,第二 ...

  7. Map学习

    1.Query Operations(查询操作) int size();boolean isEmpty(); boolean containsKey(Object key);boolean conta ...

  8. beanUtil

    mvc中,页面传值进来,struts2框架是用modeldriven spingmvc是model 不用框架的话,要手动一个一个的设置,然后在用dao方法与数据库联系 servlet框架有BeanUt ...

  9. python练习——最长的递减子序列

    题目: 求一个数组的最长递减子序列比 , 如随机生成一组序列 {8,9,6,3,6,2,3,4}   求得最长递减序列 {9,8,6,4,3,2} list=[3,3,3,3,6,2,3,4] //冒 ...

  10. xampp笔记

    1.XAMPP添加VirtualHost以支持多个站点 服务器有1个ip,但多个网站通过dns都可以指到这台服务器上,这时候要配置虚拟主机(单一系统上运行多个网站) 用顶级域名 访问方式 来访问你本地 ...