ES6学习-5 解构赋值(2)对象的解构赋值
啥也不说,先举个栗子:
1 let { myname, myage } = { myage: 18, myname: "郭郭" };
2 console.log(myname) //郭郭
3 console.log(myage) //18
很简单的例子,主要是为了说明对象解构赋值与数组解构赋值的不同。数组解构赋值时,变量是按次序排列的,变量的取值由它的位置决定;而对象解构赋值时,变量没有次序,变量名只要与属性同名,就才能取到正确的值。
那如果变量与对象的属性不同名,可以应用解构赋值吗?答案是肯定的,就是麻烦一点点,举栗子:
1 let {myage:youage,myname:youname}={ myage: 18, myname: "郭郭" };
2 console.log(youname) //郭郭
3 console.log(youage) //18
我们用对象的 myage 属性给 youage变量赋了值,用 myname 属性给 youname 赋了值,变量名与对象的属性名不一致时,可以 在变量的前边加上 "属性名:",用指定属性名来给变量赋值。
同数组解构赋值一样,对象的解构赋值也可以设置默认值,不再多说,举几个简单的栗子吧:
1 let { myname, myage=16 } = {myname: "郭郭" };
2 console.log(myname) //郭郭
3 console.log(myage) //16 没有对应的属性,所以使用了默认值
4
5 let { myname, myage=16 } = {myname: "郭郭",myage:39 };
6 console.log(myname) //郭郭
7 console.log(myage) //39 有对应的属性,所以默认值不起作用
已经声名的变量,应用解构赋值:
1 let myname,myage;
2 { myname, myage } = { myage: 18, myname: "郭郭" }; //报错啊,报错啊,why??
3 ({ myname, myage } = { myage: 18, myname: "郭郭" }) //外面加对括号就好了。
因为 JavaScript 引擎会将{...}理解成一个代码块,从而发生语法错误。只要不将大括号写在行首,避免 JavaScript 将其解释为代码块,就能解决这个问题。
奇怪而有意思的用法:
1 const { log } = console; //把console 对象的 log 方法解构给 log变量。
2 log('hello') // 相当于调用了 console.log 控制台会输出hello
ES6学习-5 解构赋值(2)对象的解构赋值的更多相关文章
- ES6 学习笔记(一)let,const和解构赋值
let和const let和const是es6新增的两个变量声明关键字,与var的不同点在于: (1)let和const都是块级作用域,在{}内有效,这点在for循环中非常有用,只在循环体内有效.va ...
- ES6学习笔记一:let、const、解构赋值
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/7236342.html 感谢阮一峰老师的无私奉献,开源推动世界!教程地址:http://es6.ruanyife ...
- es6学习笔记--字符串&数值&数组&函数&对象的扩展
这几天抽空学习了es6语法,关于字符串,数值,数组,函数以及对象的扩展,看到es6标准入门这本书,里面讲的扩展特别多,我认为有几部分在项目上用不到,就挑有用的当笔记学习了. 字符串的扩展 str.in ...
- Java Web学习总结(5)——HttpServletResponse对象详解
一.HttpServletResponse常见应用--生成验证码 1.1.生成随机图片用作验证码 生成图片主要用到了一个BufferedImage类, 生成随机图片范例: package gacl.r ...
- ES6学习笔记四(类和对象)
{ // 构造函数和实例 class Parent{ constructor(name='mukewan'){ this.name=name; } } let v_parent=new Parent( ...
- ES6学习 第二章 变量的解构赋值
前言 该篇笔记是第二篇 变量的解构赋值. 这一章原文链接: 变量的解构赋值 解构赋值 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). 解构 ...
- ES6 学习笔记(整理一遍阮一峰大神得入门文档,纯自己理解使用)
1.let命令 1)let和var的区别:let声明的变量只有所在的代码块有效. 2)没有变量的提升,一定要声明后使用.使用let命令声明变量之前,该变量都是不可用的.形成“暂时性死区”. 3)typ ...
- ES6 学习体会
第一部分: 1.初始化项目 npm init -y 2.安装ES6 环境 .babelrc 文件 babel-cli -g babel-ecmascript2015 babel-cli --save- ...
- 浅谈C++中对象的复制与对象之间的相互赋值
C++对象的复制 有时需要用到多个完全相同的对象,例如,同一型号的每一个产品从外表到内部属性都是一样的,如果要对每一个产品分别进行处理,就需要建立多个同样的对象,并要进行相同的初始化,用以前的办法定义 ...
随机推荐
- 【java框架】SpringBoot(5)--SpringBoot整合分布式Dubbo+Zookeeper
1.理论概述 1.1.分布式 分布式系统是若干独立计算机的集合,这些计算机对于用户来讲就像单个系统. 由多个系统集成成一个整体,提供多个功能,组合成一个板块,用户在使用上看起来是一个服务.(比如淘宝网 ...
- 【FreeRTOS】cpu利用率统计
目录 前言 概念 作用 必看点 实现 添加几个宏定义 源码 FreeRTOS STM32 定时器 简要说明 前言 本笔记基于 stm32+FreeRTOS. 主要参考野火.安富莱. 概念 简单概要: ...
- Java例题_48 四位数据加密
1 /*48 [程序 48 加密] 2 题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的, 3 加密 规则如下: 4 每位数字都加上 5,然后用和除以 10 的余数代替该数字 ...
- rancher的ssl部署
前言 因为我司有多套k8s环境,管理起来过于麻烦,需要一个统一的管理平台,又因为没有预留时间自己开发,经过选择后,使用rancher来进行多k8s环境的统一管理平台. 部署 1.在阿里云上申请免费的证 ...
- C++并发与多线程学习笔记--多线程数据共享问题
创建和等待多个线程 数据和共享问题分析 只读的数据 有读有写 其他案例 共享数据的保护案例代码 创建和等待多个线程 服务端后台开发就需要多个线程执行不同的任务.不同的线程执行不同任务,并返回执行结果. ...
- java正则匹配${xxx} 排除单引号双引号内的内容,前提引号必须成对出现
public static void main(String[] a) { String wpp = "select 1, ${mark} '``this is, `/message22` ...
- Java代码格式化规范实践总结
目标说明 统一良好的代码格式规范可以有效提升开发团队之间的「协作效率」,如果不同的开发团队或者开发人员采用不同的代码格式规范,那么每次Format代码都会导致大量的变化,在Code Review及Me ...
- Mysql无法通过临时密码访问
在Linux上安装Mysql: [步骤一]:将mysql的安装文件上传到Linux的服务器. [步骤二]:安装MYSQL服务端 [步骤三]:安装MYSQL客户端 我在步骤三遇到了问题,所以直接从步骤三 ...
- Windows命令行学习(系统信息收集)
echo off :关闭回显 echo on :开启回显 net user :显示主机的电脑用户 ipconfig /displaydns:后面的 /displaydns是显示当前电脑所缓存的dns信 ...
- ECDSA密钥对生成以及在Token中的应用
1 概述 本文主要讲述了如何利用Openssl生成ECDSA密钥对,并利用Auth0库进行Token生成及验证的过程. 2 ECDSA 2.1 简介 ECC(Elliptic Curve Crypto ...