阮一峰ES6入门

对象的解构赋值

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

对象的属性没有次序,变量名与属性同名,即可取到正确的值。(这点数组不同)

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"let obj = { first: 'hello', last: 'world' };
let { first: f, last: l } = obj;
f // 'hello'
l // 'world'

对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量。真正被赋值的是后者,而不是前者。

let { foo: baz } = { foo: "aaa", bar: "bbb" };
baz // "aaa"
foo // error: foo is not defined
//foo是匹配的模式,baz才是变量。真正被赋值的是变量baz,而不是模式foo。

也可以用于嵌套结构

let obj = {p: ['Hello',{ y: 'World' }]
};let { p: [x, { y }] } = obj;
x // "Hello"
y // "World"

注意,这时p是模式,不是变量,因此不会被赋值。如果p也要作为变量赋值,可以写成下面这样。

let obj = {p: ['Hello',{ y: 'World' }]
};let { p, p: [x, { y }] } = obj;
x // "Hello"
y // "World"
p // ["Hello", {y: "World"}]

嵌套赋值的例子

let obj = {};
let arr = [];({ foo: obj.prop, bar: arr[0] } = { foo: 123, bar: true });obj // {prop:123}
arr // [true]

对象的解构也可以指定默认值

var {x = 3} = {};
x // 3var {x, y = 5} = {x: 1};
x // 1
y // 5var {x: y = 3} = {};
y // 3var {x: y = 3} = {x: 5};
y // 5var { message: msg = 'Something went wrong' } = {};
msg // "Something went wrong"

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

var {x = 3} = {x: undefined};
x // 3var {x = 3} = {x: null};
x // null

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

let {foo} = {bar: 'baz'};
foo // undefined

如果解构模式是嵌套的对象,而且子对象所在的父属性不存在,那么将会报错。

// 报错
let {foo: {bar}} = {baz: 'baz'};

如果要将一个已经声明的变量用于解构赋值,必须非常小心。

// 错误的写法
let x;
{x} = {x: 1};
// SyntaxError: syntax error

上面代码的写法会报错,因为 JavaScript 引擎会将{x}理解成一个代码块,从而发生语法错误。只有不将大括号写在行首,避免 JavaScript 将其解释为代码块,才能解决这个问题。

// 正确的写法
let x;
({x} = {x: 1});

由于数组本质是特殊的对象,因此可以对数组进行对象属性的解构。

let arr = [1, 2, 3];
let {0 : first, [arr.length - 1] : last} = arr;
first // 1
last // 3

转载于:https://www.cnblogs.com/loveyt/p/9556481.html

变量的解构赋值(对象)相关推荐

  1. ES6变量的解构赋值--对象篇

    目录 使用方式 普通形式 嵌套结构 使用默认值 注意事项 上一篇我们讲解了数组的解构赋值,解构还可以用于对象.字符串等等,这里我们来讲解对象的解构赋值. ES6变量的解构赋值--数组_zxn20012 ...

  2. es6—变量的解构赋值

    数组的解构赋值 /* 1.变量的解构赋值: * 数组的元素是按次序排列的,变量的取值由它的位置决定: * 从数组和对象中提取值,对变量进行赋值,这被称为解构; * 属于"模式匹配" ...

  3. 【ES6】变量的解构赋值

    [ES6]变量的解构赋值 一.什么叫解构赋值? 二.解构赋值有哪些分类?写法? 1)对数组的解构赋值 2)对对象的解构赋值 3)对字符串的解构赋值 4)对数值和布尔值的解构赋值 5)对函数参数的解构赋 ...

  4. ECMAScript6变量的解构赋值

    ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring) ###数组的解构赋值 //ES5 //var a = 1; //var b = 2; //va ...

  5. json解析 子类和父类同名属性如何赋值_想学变量的解构赋值?看完这一篇就够了...

    序言 ES6允许按照一定模式从数组和对象中提取值,然后对变量进行复制,这被称为解构(Destructuring) 数组的解构赋值 基本用法 像上面的例子,可以从数组中提取值,按照对应位置对变量赋值,这 ...

  6. ES6的新特性(3)——变量的解构赋值

    变量的解构赋值 数组的解构赋值 基本用法 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). let a = 1; let b = 2; le ...

  7. Vue2.x—理解vuex核心概念action(使用到ES6的变量的解构赋值)

    Action Action 类似于 mutation,不同在于: Action 提交的是 mutation,而不是直接变更状态. Action 可以包含任意异步操作. 让我们来注册一个简单的 acti ...

  8. ECMAScript 6入门 - 变量的解构赋值

    定义 ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). 解构赋值不仅适用于var命令,也适用于let和const命令. 解构赋值的规则是,只要 ...

  9. es6分享——变量的解构赋值

    变量的解构赋值:ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). 以前的写法: var a = 1; var b = 2; es6允许的写法 ...

最新文章

  1. request对象方法详解
  2. MySQL慢查询处理之mysqldumpslow和mysqlsla
  3. spring源码分析之定时任务概述
  4. python 模拟登陆智联_Python+scrapy爬虫之模拟登陆
  5. boost::function2用法的测试程序
  6. Swift之深入解析异步函数async/await的使用与运行机制
  7. cocos2d-x游戏开发(十五)游戏加载动画loading界面
  8. 联想e52进入bios_联想笔记本怎么设置u盘启动|联想笔记本bios设置usb启动步骤
  9. 快速排序详解+各种实现方式
  10. LOJ116 有源汇有上下界最大流(上下界网络流)
  11. 头条搜索“美丽中国”,你为哪处风景胜地打过Call?
  12. 如何实现验证码输入正确与否的判断?
  13. 国外著名博客 Gizmodo 博主 Brian Lam 访谈录
  14. 【Angular】使用高德地图比例尺心得总结
  15. 怎么用计算机弹心如水止,心静如水, 怎样用心看自己
  16. 《智慧识人术》读书笔记
  17. 阿里云域名实名认证操作图文详情 新人必看
  18. zip分卷压缩与合并解压
  19. EPC工程总承包项目经理证报考条件是什么?培训哪些内容?
  20. 推荐引擎算法学习导论:协同过滤、聚类、分类(2011年旧文)

热门文章

  1. Java基础--多态
  2. 个个都在比赚钱,有没比不赚钱的
  3. 富人是如何发财的——思考致富的方法
  4. 不是赚钱太难,妄想天上掉馅饼,才是导致贫穷的根源
  5. 如何看待使用盗版windows系统的人?
  6. 手机快充功能到底是充电头的功劳还是线的功劳?
  7. 手机一般都由富士康等企业代工,是不是意味着各品牌质量都差不多?
  8. Seeing that the girl he likes actually married his third uncle
  9. I/O设备的基本概念和分类
  10. [leetcode]36. Valid Sudoku c语言