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

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

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

基本用法

  •  如果解构失败,变量的值等于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 //

最新文章

  1. IEEE浮点标准
  2. IOS基础之UILineBreakModeWordWrap
  3. HDU 3743 Frosh Week (线段树+离散化)
  4. margin:0 auto 与 text-align:center 的区别
  5. UIscrollView和UIPageControl的循环滚动
  6. 比较数据泵和exp/imp对相同数据导出/导入的性能差异
  7. android TypedValue.applyDimension()的作用
  8. 了解JBoss Drools Engine
  9. mysql SELECT INTO OUTFILE ,can't create file (转)
  10. RabbitMQ-死信(Dead Letter)
  11. .Net类型与JSON的映射关系
  12. Debian为程序添加一个开始菜单,debian添加sublime开始菜单.
  13. windows和linux换行规则的区别
  14. python学习笔记3-列表
  15. MYSQL 查看最大连接数和修改最大连接数
  16. [转]spring MultipartFile 转 File
  17. python中的列表的嵌套与转换
  18. 文字列大好きいろはちゃんイージー / Iroha Loves Strings (ABC Edition) (优先队列)
  19. SqlServer 2005 将已存在大量数据的表更改为分区表
  20. 洛谷P4902乘积

热门文章

  1. mongodb 数据更新命令、操作符
  2. 图像模糊C均值聚类分割代码
  3. BitmapDrawable
  4. WPF 设置TextBox为空时,背景为文字提示。
  5. 利用subst命令将一个文件夹镜像成本地的一个磁盘
  6. iOS tableview的常用delegate和dataSource执行顺序
  7. WordPress自定义循环
  8. HTTPS工作原理 HTTP协议数据结构分析 HTTP和HTTPS协议的不同之处
  9. Vulnhub-XXE靶机学习
  10. ES 数据类型