解构是什么

解构(destructuring assignment)是一种表达式,将数组或者对象中的数据赋给另一变量。

在开发过程中,我们经常遇到这样问题,需要将对象某个属性的值赋给其它两个变量。代码如下:

var person = {
name:'xxxx',
age: 20,
hobby:['football', 'run']
} var a = person.name;
var hobby = person.bobby;

有了解构,我们可以精简代码了

var person = {
name:'xxxx',
age: 20,
hobby:['football', 'run']
}
let {a, hobby} = person; let [first] = person.hobby;

数组解构

let nums = [1,2,3]
let [f,s] = nums;
console.log(f); // 输出: 1
console.log(s); // 输出: 2

将数组中前两项的值分别赋给f和s

变量值交换

[f, s] = [s, f];
console.log(f); // 输出: 2
console.log(s); // 输出: 1

使用...创建剩余变量

let nums= [1,2,3,4]
let [f, ...rest] = nums;
console.log(f); // 输出: 1
console.log(rest);// 输出: [2,3,4]

忽略数组中某些元素

let [first] = [1, 2, 3, 4];
console.log(first); // 输出: 1
let [, second, , fourth] = [1, 2, 3, 4];

对象解构

let o = {
a: "foo",
b: 12,
c: "bar"
}
let { a, b } = o;
console.log(a); // 输出: foo
console.log(b);// 输出: 12

将对象o.a赋值给a,0.b赋值给b,这里的a,b都是对象属性名且必须一致,而属性c则会忽略

重命名

上述例子中声明的变量a和b必须和对象中属性一致,如果想换一个名字,写法如下:

let { a: aa, b: bb } = o;

默认值

let o = {
a: "foo",
b: undefined,
c: "bar"
}
let {a, b=1}= o;
console.log(a); // 输出: foo
console.log(b);// 输出: 1

当属性b的值为undefined时,解构表达式会使用默认值

展开

展开和解构正好相反,将一个数组展开为另一个数组,或将一个对象展开为另一个对象。

数组展开

let first = [1, 2];
let second = [3, 4];
let bothPlus = [0, ...first, ...second, 5]; console.log(bothPlus);// 输出:0,1,2,3,4,5

展开操作会对数组first和second浅拷贝,如果fisrt值修改,则bothPlus值不会改变。但是如果first中是对象数组,改变对象内部的值,bothPlus对应的值会改变。

对象展开

let defaults = { food: "spicy", price: "$$", ambiance: "noisy" };
let search = { ...defaults, food: "rich" };
console.log(search); //输出:{food: "rich", price: "$$", ambiance: "noisy"}

展开是从做到右处理,意味着对象后面的属性会覆盖前面的。如下:

let defaults = { food: "spicy", price: "$$", ambiance: "noisy" };
let search = {food: "rich", ...defaults };
console.log(search); //输出:{food: "spicy", price: "$$", ambiance: "noisy"}

注意:使用...创建展开,请使用typescript@2.1.x版本

TypeScript笔记 5--变量声明(解构和展开)的更多相关文章

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

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

  2. ES6学习笔记(2)----变量的解构和赋值

    参考书<ECMAScript 6入门>http://es6.ruanyifeng.com/ 变量的解构和赋值 本质上:只要模式匹配,左边的变量就能被赋予右边对应的值 原则: 解构赋值的规则 ...

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

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

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

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

  5. ES6学习笔记(二)变量的解构与赋值

    1.数组的解构赋值 1.1基本用法 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). 以前,为变量赋值,只能直接指定值. let a = 1 ...

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

    变量的解析赋值 数组的解析赋值 es6允许按照一定的模式,从数组和对象中提取值,对变量进行赋值,这就称为解构. var a = 1; var b = 2; var c = 3; //在es6中允许写成 ...

  7. es6笔记(3) 变量的解构赋值

    基本概念 本质上是一种匹配模式,只要等号两边的模式相同,那么左边的变量就可以被赋予对应的值. // 以往定义接个变量的时候,需要这样 var a = 1, b = 2, c = 3; // 使用ES6 ...

  8. ES6学习笔记(一)-变量的解构赋值

    变量的解构赋值种类 解构(Destructuring):ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值. 只有当一个数组成员严格等于(===)undefined,包括空“ ” ,默认值 ...

  9. Typescript 解构 、展开

    什么是解构.展开? 展开与解构作用相反,简单来说: 解构:解构赋值允许你使用数组或对象字面量的语法,将数组和对象的属性付给各种变量. 展开:允许你讲一个数组展开为另一个数组,或一个对象展开为另一个对象 ...

随机推荐

  1. Saltstack的安装和配置

    1.安装salt 因为系统自带的yum源不支持saltstack安装包的支持,所以需要安装第三方yum源(epel) # yum -y install epel-release salt分为主服务器( ...

  2. 冲顶大会APP技术选型及架构设计

    我在1月4日看到虎嗅推送"王思聪撒币"的消息,然后开始推敲背后技术.其中涉及直播流.实时弹幕.OAuth2.0开放授权.SMS api.Push网关.支付接口等业务,其技术实现并不 ...

  3. windows server数据库备份

    @echo off //设置生成文件名字 set "Ymd=%date:~,4%%date:~5,2%%date:~8,2%"//使用mysqldump输出sql文件 cesec ...

  4. css自适应

    一.顶部标题自适应 <html> <head> <title>顶部标题</title> <style> body{padding:0;mar ...

  5. 任务调度 -----> quartz 不同时间间隔调度任务

    Quartz Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Quartz可以用来创建简单或为运 ...

  6. CentOS7源码安装lamp

    环境介绍 虚拟机 : VMware Workstation 14 Pro 镜像 : CentOS Linux release 7.4.1708 (Core) 物理机 : windows 7 64位 防 ...

  7. SQL Server Service Broker创建单个数据库会话

    概述 SQL Server Service Broker 用来创建用于交换消息的会话.消息在目标和发起方这两个端点之间进行交换.消息用于传输数据和触发消息收到时的处理过程.目标和发起方既可以在同一数据 ...

  8. MicroPython-GPRS教程之TPYBoardv702GPRS功能测试

    一.什么是TPYBoardV702 TPYBoardV702是目前市面上唯一支持通信通信功能的MicroPython开发板:支持Python3.0及以上版本直接运行.支持GPS+北斗双模通信.GPRS ...

  9. powershell V6.0登基之:《瘸腿脚本大帝进攻linux!》

    ------[前言]------ 每个ps大版本发布,我都会写个消息. 这次的,主标题就叫:powershell v6.0登基副标题就叫:<瘸腿脚本大帝进攻linux!> ------[p ...

  10. apache2.2版本安装说明

     部署httpd服务  apache是一个模块化设计的服务,所谓的模块化就是将各个功能,特性都独立的分开,这样设计的好处是可扩展性强,各个功能之间的依赖性相对较弱,在后期修改,升级,添加新功能是非常方 ...