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. GCJ 2015-Qualification-C Dijkstra 特殊注意,展开 难度:2

    https://code.google.com/codejam/contest/6224486/dashboard#s=p2 题目中的新运算满足传递性不满足自反性,满足传递性则可以先计算后面的部分再计 ...

  2. WDCP管理面板安装启动EXIF、bcmath完整步骤

    一般我们网站建设的需要,如果使用WDCP面板默认的功能就足够使用,如果需要特殊程序的特定组件支持,就需要独立的安装支持组件.比如一位朋友的程序需要支持EXIF.bcmath组件,这不老蒋寻找解决方法, ...

  3. Python中通过多个字符分割(split)字符串的方法

    python中字符串自带的split方法一次只能使用一个字符对字符串进行分割,但是python的正则模块则可以实现多个字符分割 import re re.split('-|_','sharejs_ha ...

  4. 近期C++编译问题汇总

    编译c++ 代码中遇到几个问题,汇总一下: 1.编译openssl 遇到问题如图 ,  原因:不支持汇编编译,在perl编译指令中加入: no-asm , 如:perl Configure VC-WI ...

  5. NOIP 2013 提高组 day1 T2 火柴排队 归并 逆序对

    描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度.现在将每盒中的火柴各自排成一列,同一列火柴的高度互不相同,两列火柴之间的距离定义为:∑i=1n(ai−bi)2∑i=1n(ai−bi) ...

  6. 面试题目-atof与ftoa

    /////////////////////////////////////////////////////////////////////////////// // // FileName : ato ...

  7. 【转】./configure && make && make install详解

    在Linux中利用源码包安装软件最重要的就是要仔细阅读安装包当中的README  INSTALL两个说明文件,这两个文件会清楚的告诉你如何可以正确的完成这个软件的安装!          我们都知道源 ...

  8. 苹果推送APNS自己总结

    开发状态服务器地址 gateway.sandbox.push.apple.com 2195 产品状态服务器地址 gateway.push.apple.com         2195 Developm ...

  9. NTP服务器的配置

    安装cloudera Manager的时候,必须要求集群的主机之间时间同步,搭建一个NTP服务器的思路是,首先通过一台主机master与外网进行时间同步,然后其他的slaver主机与主机master进 ...

  10. 认真对待每一道算法题 之 两个排序好的数组寻找的第k个大的数

    转载博客:http://www.cnblogs.com/buptLizer/archive/2012/03/31/2427579.html 题目意思:给出两个排好序的数组 ,不妨设为a,b都按升序排列 ...