对象的解构与数组有一个重要的不同。

数组的元素是按次序排列的,变量的取值由它的位置决定

而对象的属性没有次序,变量必须与属性同名,才能取到正确的值。

基本用法

  •  如果解构失败,变量的值等于undefined。 

    let { bar, foo } = { foo: 'aaa', bar: 'bbb' };
    foo // "aaa"
    bar // "bbb" let { baz } = { foo: 'aaa', bar: 'bbb' };
    baz // undefined
  • 如果变量名与属性名不一致,必须写成下面这样。
    let { foo: baz } = { foo: 'aaa', bar: 'bbb' };
    baz // "aaa"
    foo // error: foo is not defined

    上面代码中,foo是匹配的模式,baz才是变量。真正被赋值的是变量baz,而不是模式foo

对象解构默认值

  • 默认值生效的条件是,对象的属性值严格等于undefined

    var {x = 3} = {};
    x // var {x, y = 5} = {x: 1};
    x //
    y // var {x: y = 3} = {};
    y // var {x: y = 3} = {x: 5};
    y // var { message: msg = 'Something went wrong' } = {};
    msg // "Something went wrong" var {x = 3} = {x: undefined};
    x // var {x = 3} = {x: null};
    x // null
  • 如果要将一个已经声明的变量用于解构赋值,必须非常小心。
    // 错误的写法
    let x;
    {x} = {x: 1};
    // SyntaxError: syntax error上面代码的写法会报错,
    //因为 JavaScript 引擎会将{x}理解成一个代码块,从而发生语法错误。
    //只有不将大括号写在行首,避免 JavaScript 将其解释为代码块,才能解决这个问题。 // 正确的写法
    let x;
    ({x} = {x: 1});
  • 解构赋值允许等号左边的模式之中,不放置任何变量名。因此,可以写出非常古怪的赋值表达式。
    ({} = [true, false]);
    ({} = 'abc');
    ({} = []);

    上面的表达式虽然毫无意义,但是语法是合法的,可以执行。

  • 由于数组本质是特殊的对象,因此可以对数组进行对象属性的解构
    let arr = [1, 2, 3];
    let {0 : first, [arr.length - 1] : last} = arr;
    first //
    last //

【ES6 】ES6 解构赋值--对象解构赋值的更多相关文章

  1. ES6学习 第二章 变量的解构赋值

    前言 该篇笔记是第二篇 变量的解构赋值. 这一章原文链接: 变量的解构赋值 解构赋值 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). 解构 ...

  2. 关于ES6 的对象解构赋值

    之 前写了关于ES6数组的解构 现在 go on ; 解构不仅可以用于数组,还可以用于对象: 对象的解构和数组有一个重要的不同.数组的元素是按次序排列的,变量的取值是由他的位置决定的:而对象的属性没有 ...

  3. ES6学习随笔--字符串模板、解构赋值、对象、循环、函数、Promise、Generrator

    在线编译器:babel.github 在nongjs中使用 'use strict' let a = ; 运行node : node --harmony_destructuring xxx.js 代码 ...

  4. (3)ES6解构赋值-对象篇

    对象的解构赋值(可以不按顺序,但是key必须一样否则为undefined) //demo1 var {name,age} = { name: "Jewave", age:26 }; ...

  5. ES6 对象解构

    ES6 对象解构 第一眼看到,什么鬼? const { body } = document `` 其实等于: const body = document.body ``` http://es6.rua ...

  6. ES6(二) Destructuring-变量的解构赋值

    1.解构的含义 允许按照一定的模式,从数组和对象中取值,对变量进行赋值,称为解构. 解构赋值时,只要等号右边的值不是对象,就先将其转换成对象. 本质上,这种写法属于 “模式匹配”,只要两边模式相同,左 ...

  7. ES6标准入门之变量的解构赋值简单解说

    首先我们来看一看解构的概念,在ES6标准下,允许按照一定模式从数组和对象中提取值,然后对变量进行赋值,这被称作解构,简而言之粗糙的理解就是变相赋值. 解构赋值的规则是,只要等号右边的值不是对象或者数组 ...

  8. ES6系列_3之变量的解构赋值

    ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构. 解构有三种类型: 1.数组的解构赋值 (1)简单的数组解构 以前,我们给变量赋值是直接单个指定值,比如: let a=0; ...

  9. ES6第三节:变量的解构赋值

    ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构.下面我们看实际的例子: 一.数组解构: let [a,b,c] = [1,2,3]; console.log(a); //a ...

随机推荐

  1. nodeJS 项目如何运行

    nodeJS 项目如何运行 一.总结 一句话总结: nodejs项目根目录中用node xx.js 或是 node xx运行 打开 window的 cmd 命令窗口,使用 cd 命令跳转到 nodeJ ...

  2. win10系统在执行“ vagrant box add centos7 vagrant-centos-7.box”添加box时,报错“Vagrant failed to initialize at a very early stage: Failed to locate the powershell executable on the available PATH. ”

    这个意思是:在有效的路径中未能执行PowerShell命令. 请检查PowerShell的安装和有效的路径,然后再尝试重新运行这个命令. 在环境变量path中添加powershell的路径,例如:C: ...

  3. SqlServer自动锁定sa解决代码

    ALTER LOGIN sa ENABLE ; GO ALTER LOGIN sa WITH PASSWORD = '' unlock, check_policy = off, check_expir ...

  4. [Oracle]索引对insert和delete操作的影响

    主键也是索引的一种,在索引中,不仅存储了索引列上的数据,而且还存储了一个ROWID的值.ROWID是表中一个伪列,是数据库服务自动添加的,表中的每一行数据都有一个ROWID值,它代表这一行的标识,即一 ...

  5. <JavaScript> 稳妥构造函数模式与工厂模式的区别

    稳妥构造函数模式的代码应该是这样的: function Person(name, age, job) { var o = new Object(); // private members var na ...

  6. Swift 常量

    常量一旦设定,在程序运行时就无法改变其值. 常量可以是任何的数据类型如:整型常量,浮点型常量,字符常量或字符串常量.同样也有枚举类型的常量: 常量类似于变量,区别在于常量的值一旦设定就不能改变,而变量 ...

  7. 数据分析 - sql 业务相关练习题

    数据库    userinfo , orderinfo 表 两个 userId 彼此对应 题目 解题 不同月份的下单人数 用户在同一个月份会下多个单,这里进行去重 未支付的脏数据去除 统计用户三月份的 ...

  8. react对字符串转义成html并渲染

    <div dangerouslySetInnerHTML={{__html: "字符串内容"}} />  

  9. delphi7 clientdataset 详解

    delphi Midas SQLServer的自增字段的处理1.新增时,表中有自增字段,但是不希望用Refresh,直接ApplyUpdates直接看见自增字段的值在DataSetProvider.A ...

  10. Tomcat 80端口被占用

    1.“运行”中输入cmd2.在命令行中输入netstat -ano,得到端口号对应的PID 3.打开任务管理器,点击“查看“菜单,选择“选择列”,给进程列表中添加”PID“列,然后找到PID对应的进程 ...