什么是解构、展开?

展开与解构作用相反,简单来说:

解构:解构赋值允许你使用数组或对象字面量的语法,将数组和对象的属性付给各种变量。

展开:允许你讲一个数组展开为另一个数组,或一个对象展开为另一个对象。

    1. 数组解构

      // 1.数组元素的赋值-JavaScript语法
      var first=someArray[0];
      var second=someArray[1];
      var third=someArray[2]; // 2.对比一下TypeScript、ES6提供简介、高效、可读的解构语法
      var [first,second,third]=someArray; // 3. 对任意深度的嵌套数组进行解构
      var [foo,[[bar],baz]]=[1,[[2],3]];
      console.log(foo);//
      console.log(bar);//
      console.log(baz);// // 4.忽略尾随元素
      let [first]=[1,2,3,4];
      console.log(first);// // 5 .忽略部分元素
      let [,second,,forth]=[1,2,3,4];
      console.log(second);//
      console.log(forth);//
    2. 对象解构 

      // 1. 解构对象
      let o={
      a:'foo',
      b:12,
      c:'bar'
      };
      let {a,b}=o; // 2. 没有声明的赋值
      ({a,b}={a:'foo',b:12,c:'bar'});//注意此处,需要用括号括起来,因为javascript通常会以{起始的语句作为一个代码块。 // 3.对象里面可以使用 ... 语法创建剩余变量
      let {a,...passthrough}=o;
      let total=passthrough.b+passthrough.c.length; // 4. 属性重命名
      let {a:newName1,b:newName2}=o; //a:newName1读作“a作为newName1”,等价于一下写法:
      let newName1=o.a;
      let newName2=o.b; // 5. 指定类型
      let {a,b}:{a:string,b:number}=o; // 6 .指定默认值(即使b为udefined,obj的属性a,b也都会有值)
      function keepWhole(obj:{a:string,b?:number}{
      let {a,b=1001}=obj;
      });
    3. 展开 

      // 1. 数组展开
      let first=[1,2];
      let second=[3,4];
      let all=[0,...first,...second,5];
      console.log(all);//0,1,2,3,4,5 // 2. 对象展开(属性值覆盖)
      let default={ food:'spicy',price:'$',drink:'coko'};
      let search={...default,food:'rich'};
      console.log(search);//{food:'rich',price:'$',drink:'coko'} // 3.对象展开:它只包含自身的可枚举的属性。 并且会丢失展开对象的方法:
      class C={p:12,m(){}};
      let c=new C();
      let clone={...c};
      console.log(clone.p);//
      console.log(clone.m);//error!

      ___end

Typescript 解构 、展开的更多相关文章

  1. TypeScript 解构和展开

    解构数组 解构数组元素 let input = [1, 2]; let [first, second] = input; console.log(first,second); 交换值 [first, ...

  2. TypeScript 解构

    ⒈解构数组 最简单的解构莫过于数组的解构赋值了: let input = [1, 2]; let [first, second] = input; console.log(first); // out ...

  3. TypeScript笔记 5--变量声明(解构和展开)

    解构是什么 解构(destructuring assignment)是一种表达式,将数组或者对象中的数据赋给另一变量. 在开发过程中,我们经常遇到这样问题,需要将对象某个属性的值赋给其它两个变量.代码 ...

  4. Typescript中一些不理解的概念解释(泛型、断言、解构、枚举)

    新的项目想使用typescript,因此又对其概念及使用过一遍,本文主要记录下对之前一些概念不太理解的地方. 1.泛型 定义: 在定义函数.接口或者类的时候,不预先指定具体的类型,而是在使用的时候再指 ...

  5. TS学习之解构与展开

    一.解构 1.解构数组 let input = [1, 2]; let [first, second] = input; console.log(first); // outputs 1 consol ...

  6. 变量声明---let,const,解构

    let在很多方面与var是相似的,但是可以帮助大家避免在JavaScript里常见一些问题. const是对let的一个增强,它能阻止对一个变量再次赋值. 块作用域 当用let声明一个变量,它使用的是 ...

  7. 豪情-CSS解构系列之-新浪页面解构-01

    目录: 一. 新浪的布局特点 二. 内容细节的特点 三. 其中相关的一些基础技术点 1. 常见布局方法 2. 布局要点 3. Debugger误区 4.列表 5.字体颜色 6.CSS选择符 7.CSS ...

  8. ES6新特性-------解构、参数、模块和记号(续)

    六.解构 解构提供了一个方便的地从对象或数组中提取数据的方法,请看下面的例子: //ES6 let [x,y]=[1,2];//x=1,y=2 //ES5 var arr=[1,2]; var x=a ...

  9. 前端笔记之ES678&Webpack&Babel(上)初识ES678&Babel&let和const&解构&语法

    一.ES版本简介和调试运行方法 1.1 ECMAScript简介 MDN手册:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript JavaS ...

随机推荐

  1. 并归排序 (Java版本,时间复杂度为O(n))

    自己上网查了一下并归排序的定义,把两个排序好的数组重新组成一个排序好的数组就是并归排序, 实现的方式有和多种,自己思考了一下,用java实现了一版本,思路如下,既然是排序好的,只需要依次比较两个数组, ...

  2. django-xadmin ModelAdmin中定义object_list_template无效的问题

    环境:https://github.com/y2kconnect/xadmin-for-python3.git python3.5.2 django1.9.12 object_list_templat ...

  3. CSS学习笔记10 相对定位,绝对定位与固定定位

    文档流中的元素的位置由元素在 (X)HTML 中的位置决定,这就是最原始的普通流,前面讲到的浮动CSS学习笔记08 浮动可以改变元素在文档流中的位置,除了这个我们还可以通过使用CSS的position ...

  4. React文档翻译 (快速入门)

    翻译自react的大部分文档,方便自己查阅. 目录 生命周期 实例化 存在期 销毁期 state Do Not Modify State Directly State Updates May Be A ...

  5. CSS样式表之background背景

    [CSS常用背景属性]:background (缩写形式) background-color:背景色 background-image:背景图  url中放图片地址,背景图和背景色同时存在时,背景图覆 ...

  6. Linux的同步访问技术

    1.中断屏蔽: 单CPU范围内避免竞态的一种简单方法:在进入临界区之前屏蔽系统的中断.中断屏蔽将使得中断与进程之间的并发不再发生,而且Linux内核的进程调度等操作都依赖中断来实现,内核抢占式进程之间 ...

  7. CharacterEncodingFilter -处理字符格式

    package com.pb.news.web.filter; import java.io.IOException;import javax.servlet.Filter;import javax. ...

  8. c#Message多功能用法

     1.   当要显示如图3个按钮时,并要获得单击不同按钮的进行不同的相应时,可以在MessageBoxButtons后面添加一个.(应该英文的点,此处为了醒目,用中文代替)可以看到提示框下方需要几个按 ...

  9. Debian 8添加kali更新源并安装metasploit

    一.Debian 8添加kali更新源 中科大kali更新源: deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contr ...

  10. App的前后台数据同步

    前言 在开发一个点餐软件时,app的订单数据是使用本地Sqlite数据库,在提交订单数据后,当订单数据在后台(Mysql数据库)发生变化时(如:已买单),本地数据如何改变呢? 思路 前台在查询时,将后 ...