变量的解析赋值

数组的解析赋值

  • es6允许按照一定的模式,从数组和对象中提取值,对变量进行赋值,这就称为解构

      var a = 1;
    var b = 2;
    var c = 3;
    //在es6中允许写成:
    var [a,b,c] = [1,2,3];
    //表示从数组中提取值,按照位置的对应关系对变量赋值

本质为:“模式匹配”。

如果解构不成功,变量的值就等于undefined

    var [foo] = [];
var [bar, foo] = [1];
// foo的值为undefined
let [x,y,....z] = ['a'];
x //"a"
y //undefined
z //[] let [a, [b], d] = [1, [2,3], 4];

上面的例子为不完全解构,但是可以成功。如果等号的右边不是数组(或者严格的说,不是可遍历的结构),那么就会报错。

  • 解构赋值允许有指定的默认值

       var  [foo = true] = [ ];
    foo //true [x, y = 'b'] = ['a']; //x = 'a' , y = 'b'

    注意:es6内部使用严格相等运算符(===)判断一个位置是否有值,所以一个数组成员不严格等于undefined,默认值是不会生效的,

      var [x = 1] = [undefined]; //x = 1
    var [x = 1] = [null]; //x = null

对象的解构赋值

解构不仅仅用于数组,还可以用于对象,

    var { foo ,bar} = { foo : "aaa",bar : "bbb"};
foo //"aaa"
bar //"bbb"

对象的解构与数组有一个重要的不同。数组的元素是按照次序排列的,变量的取值由他的位置决定;而对象的属性没有次序,变量必须与属性同名,才能取到正确的值。也就是说,对象的解构赋值的内部机制是先找到同名的属性,然后再赋值给对应的变量。真正被赋值的后者,而不是前者。

    var {foo :baz} = {foo :"aaa", bar :"bbb"};
baz // aaa
foo //error:foo is not undefined

这段代码说明,真正被赋值的是变量baz,而不是模式foo

字符串的解构赋值

这是因为,此时字符串被转换成了一个类似数组的对象。

const [a,b,c,d,e] = 'hello';
a // "h"
b //"e"
..

类似数组对象都有length属性,因此还可以对这个属性解构赋值。

let {length :len} = 'hello';
len //5

数值和布尔值的解构赋值

解构赋值时,如果等号右边是数值或是布尔值,就先转为对象。解构赋值的原则是:只要的等号右边不是对象,就先将它转为对象。由于undefined和null无法转为对象,所以对他们进行解构赋值都会报错。

函数参数的解构赋值

 function add([x ,y]){
return x+y;
}
add([1,2]); //3

上面的代码中,函数add的参数实际上不是一个数组,而是通过解构获得的变量x,y。

undefined会触发函数参数的默认值

[1,undefined,3].map((x = 'yes') => x)
// [1,'yes',3]

用途

  • 变换变量的值

       [x,y] = [y,x];
  • 从函数返回多个值

       function show(){
    return [1,2,3];
    }
    var [a,b,c] = show();
    //返回一个数组
  • 函数参数的定义

    解构赋值可以方便的将一组参数与变量名对应起来

     function f([x,y,z]){...}
    f([1,2,3])
  • 提取JSON数值

         var jsondata = {
    id: 34,
    status: "ok",
    data: [232,433]
    }
    let {id, status, data: number} =jsondata;
    console.log(id, status, number); //42, ok, [232,433]
  • 函数参数的默认值

  • 遍历Map结构

    任何部署了iterator接口的对象,都可以用for....of循环遍历,Map数据原生支持该接口,配合变量的解构赋值,获取键名和键值就很方便了。

       var map = new Map();
    map.set('first', 'hello');
    for(let[key, value] o
    f map){
    console.log(key + "is" + value);
    }
  • 输入模板的指定方法

ES6 - 变量的解构赋值学习笔记的更多相关文章

  1. es6变量的解构赋值学习笔记

    1. 解构赋值的规则是,只要等号右边的值不是对象,就先将其转为对象.由于undefined和null无法转为对象,所以对它们进行解构赋值,都会报错. let { prop: x } = undefin ...

  2. ES6 变量的解构赋值

    数组的解构赋值     var [a,b,c] = [1,2,3];    左边是变量,右边是值,根据数据结构一一对应 只要等号两边的模式相同,左边的变量就会被赋予右边对应的值,必须模式相同 如果等号 ...

  3. ES6变量的解构赋值

    变量的解构赋值 1.数组的解构赋值 2.对象的解构赋值 3.字符串的解构赋值 4.数值和布尔值的解构赋值 5.函数参数的解构赋值 6.圆括号问题 7.用途 1.数组的解构赋值 ES6 允许写成下面这样 ...

  4. es6—变量的解构赋值

    数组的解构赋值 ]]]]]]] = []}} = {}} = {}})]: first]: last} = arr} = {}) {}))}))}) {}))}))].]]]])})] }}} = { ...

  5. ES6变量的解构赋值(一)数组的解构赋值

    let[a,...arr]=[1,2,3,4];//a==>1 arr==>[2,3,4] let [x, y, ...z] = ['a'];//a==>'a' y==>und ...

  6. ES6变量的解构赋值(二)对象的解构赋值

    前面我们知道,数组的结构赋值需要按顺序进行赋值, let [a,,c] = [,,] console.log(a); console.log(c);//3 let [a,b] = [1];consol ...

  7. ES6 学习笔记 - 变量的解构赋值

    变量的解构赋值 学习资料:ECMAScript 6 入门 数组的解构赋值 基本用法 可以从数组中提取值,按照对应位置,对变量赋值.这种写法属于"模式匹配". let [a, b, ...

  8. ES6中的变量的解构赋值, 解放我们的双手,实现变量的批量赋值

    ES6--变量的解构赋值 引言 正文 一.数组的解构赋值 解构失败 不完全解构 默认值 二.对象的解构赋值 三.字符串的解构赋值 结束语 引言 变量的解构赋值, 听起来很复杂, 简单点说可以理解成批量 ...

  9. ES6学习笔记之变量的解构赋值

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

随机推荐

  1. 搭建App主流框架_纯代码搭建(OC)

    转载自:http://my.oschina.net/hejunbinlan/blog/529778?fromerr=EmSuX7PR 搭建主流框架界面 源码地址在文章末尾 达成效果 效果图 注:本文部 ...

  2. 【Android Demo】通过WebService获取今日天气情况--转

    因为本身是在搞.NET方面的东东,现在在学习Android,所以想实现Android通过WebService接口来获取数据,网上很多例子还有有问题的.参考:Android 通过WebService进行 ...

  3. dotnet webservice处理数据量过大,ajax请求返回500错误解决方案

    ajax请求webservice返回json数据,数据规模过大时ajax请求会得到500的响应,webservice+ajax处理大规模的数据需要在web.config中进行如下配置: <sys ...

  4. [转] MMO即时战斗:地图角色同步管理和防作弊实现

    一.前言 无论是端游.页游.手游如果是采用了MMO即时战斗游戏模式,基本都会遇到同屏多角色实时移动.释放技能.战斗等场景,于是自然也需要实现如何管理同屏内各种角色的信息同步:例如角色的位置.以及角色身 ...

  5. 英语学习/词典app行业top5简要分析

    综述 根据豌豆夹上的下载量如下图所示,我们组确定的国内行业top5分别是:有道词典(黄明帅负责),金山词霸(黄珂锐负责),百度翻译(刘馨负责),百词斩(贾猛负责),英语流利说(亢建强负责)(时间有限, ...

  6. 前端开发chrome与fireFox浏览器都使用

    chrome查看元素的样式时,显示的很方便和准确,方便开发快速辨别结构. 而fireFox在css3上,我发现好像比chrome支持得更全面.

  7. JavaScript(三)---- 控制流程语句

    常用的控制流程语句有判断语句.分支语句.循环语句.基本用法都和java中的一致,switch有几点特殊. 1.判断语句 格式:        if(判断条件){            符合条件执行的代 ...

  8. ARC下需要注意的内存管理

    ARC下需要注意的内存管理 2016/04/03 · iOS开发 · 内存管理 分享到:1 原文出处: 一不(@luoyibu)    之前发了一篇关于图片加载优化的文章,还是引起很多人关注的,不过也 ...

  9. 所有事件event集锦

    'mousedown touchstart', 'mousemove touchmove', 'mouseup mouseleave touchend touchleave touchcancel', ...

  10. checkbox选择多数据传入后台时,怎样解析数据

    <input type="checkbox" name="test" value="值1" />显示的内容<input t ...