前言

  es6 中引入了解构这一新特性,了解解构成为一个格合前端必须掌握的基础知识,不仅作为了面试的重要考查知识,同时能极大提高我们平常工作的开发效率。本文来总结一下需要掌握的解构知识点。

正文

  1.什么是解构赋值

  解构赋值允许你使用类似数组或对象字面量的语法将数组和对象的属性赋给各种变量。这种赋值语法极度简洁,同时还比传统的属性访问方法更为清晰。解构有什么作用呢?解构提供了更方便的数据访问。下面对比一下es6的解构之前后访问对象或者数组的信息的方式对比:

  1. // Es6之前
  2. let obj = { name: "小明", sex: "男" };
  3. var name = obj.name
  4. var sex = obj.sex
  5. console.log(name);//小明
  6. console.log(sex)//男
  7. // Es6之后
  8. let info = { name: "xiaoming", age: "18" }
  9. var { name ,age} = info
  10. console.log(name);//xiaoming
  11. console.log(age);//18

  2.对象解构

  (1)解构赋值

  1. let obj = {
  2. type: "objType",
  3. }
  4. type = "myType";
  5. ({ type } = obj)
  6. console.log(type);//objType
  这里必须使用()因为默认js会把{}解析为代码块,块语句不允许在赋值语句左侧出现,加了()之后,该语句被当作表达式,不是块语句,从而完成赋值操作。
 
  (2)解构默认值,设置默认值
  1. let obj = {
  2. type: "objType",
  3. }
  4. let { type, type1,type2 = "type2" } = obj
  5. console.log(type);//objType
  6. console.log(type1);//undefined
  7. console.log(type2);//type2
  当使用解构赋值语句时,如果所指定的本地变量在对象中没有找到同名属性,那么该变量会被赋值为undefined。type2变量被赋值为默认值 type2 ,当obj对象中招不到同名属性的时候,使用了默认值。
 

  (3)解构后赋值给不同的本地变量名

  1. let obj = {
  2. type: "objType",
  3. };
  4. let { type: myType, name: otherName = "otherName" } = obj;
  5. console.log(myType);//objType
  6. console.log(otherName);//otherName

  上面的代码,首先读取 type 变量的属性,并把它的值存储在变量 myType 上,后半行由于 obj 中不存在 name 属性 ,赋值给 otherName的时候使用了默认值。

  (4)嵌套的对象解构

  1. let myInfo = {
  2. name: "xiaomign",
  3. loc: {
  4. start: {
  5. data: "123"
  6. },
  7. end: {
  8. data: "345"
  9. }
  10. }
  11. }
  12. let { name, loc: { start: { data: myDate } } } = myInfo
  13. console.log(myDate);//123

  

  3.数组解构

  (1)解构赋值

  1. var arr = ["red", "blue", "green"]
  2. var [firstColor, secondColor] = arr
  3. console.log(firstColor);//red
  4. var [, , thirdColor] = arr
  5. console.log(thirdColor);//green

  

  (2)两个变量交换位置

  1. var a = 1,b = 2;
  2. [a,b] = [b,a]
  3. console.log(a);//2
  4. console.log(b);//1

  

  (3)设置默认值

  1. let arr = ["red", "blue", "green"]
  2. let [first,second = "second",third,four = "four"] = arr
  3. console.log(first);//red
  4. console.log(second);//blue
  5. console.log(third);//green
  6. console.log(four);//four

  

  (4)嵌套解构

  1. var colorArr = ["red",["red1","red2"],"blue"]
  2. var [first,[first1]] = colorArr
  3. console.log(first1);//red1

  

  (5)剩余解构

  1. var arr = ["red", "blue", "green"]
  2. var [first,...restArr] = arr
  3. console.log(restArr);//["blue","green"]

  (6)数组克隆

  1. // es6之前数组克隆
  2. let arr = ["red", "blue", "green"]
  3. let cloneArr = arr.concat()
  4. console.log(cloneArr);//["red", "blue", "green"]
  5. // es6利用剩余解构完成数组克隆
  6. let [...cloneArr1] = arr
  7. console.log(cloneArr1) //["red", "blue", "green"]

  4.混合解构

  1. let node = {
  2. name: "foo",
  3. loc: {
  4. start: {
  5. line: 1,
  6. column: 1
  7. },
  8. end: {
  9. line: 1,
  10. column: 4
  11. }
  12. },
  13. range: [0, 3]
  14. };
  15. let {
  16. loc: { start },
  17. range: [startIndex]
  18. } = node;
  19. console.log(start.line); // 1
  20. console.log(start.column); // 1
  21. console.log(startIndex); // 0

写在最后

  以上就是本文的全部内容,希望给读者带来些许的帮助和进步,方便的话点个关注,小白的成长踩坑之路会持续更新一些工作中常见的问题和技术点。

 

js--ES6新特性之解构的更多相关文章

  1. ES6新特性之解构使用细节

    ES6的解构说白了就是能够让我们一次性取到多个值,大致可分为一下几个方面 1.数组解构 普通的一维数组解构,如下one = array[0],two=array[1],three=array[2] v ...

  2. javascript ES6 新特性之 解构

    解构的作用是可以快速取得数组或对象当中的元素或属性,而无需使用arr[x]或者obj[key]等传统方式进行赋值 var arr = [1, 2, 3]; //传统方式 var a = arr[0], ...

  3. JavaScript ES6 新特性详解

    JavaScript ES6 带来了新的语法和新的强大功能,使您的代码更现代,更易读 const ,  let and var 的区别: const , let 是 ES6 中用于声明变量的新关键字. ...

  4. ECMAscript6新特性之解构赋值

    在以前,我们要对变量赋值,只能直接指定值.比如:var a = 1;var b = 2;但是发现这种写法写起来有点麻烦,一点都不简洁,而在ECMAScript6中引入了一种新的概念,那就是" ...

  5. ECMA Script 6新特性之解构赋值

    1.基本概念用法 1.1解构赋值:ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值. var a = 1; var b = 2; var c = 3; /*上述赋值语句用解构赋值为*/ v ...

  6. ES6,ES2105核心功能一览,js新特性详解

    ES6,ES2105核心功能一览,js新特性详解 过去几年 JavaScript 发生了很大的变化.ES6(ECMAScript 6.ES2105)是 JavaScript 语言的新标准,2015 年 ...

  7. Atitit js版本es5 es6新特性

    Atitit js版本es5 es6新特性 Es5( es5 其实就是adobe action script的标准化)1 es6新特性1 Es5( es5 其实就是adobe action scrip ...

  8. Atitit js es5 es6新特性 attilax总结

    Atitit js es5 es6新特性 attilax总结 1.1. JavaScript发展时间轴:1 1.2. 以下是ES6排名前十的最佳特性列表(排名不分先后):1 1.3. Es6 支持情况 ...

  9. ES6新特性三: Generator(生成器)函数详解

    本文实例讲述了ES6新特性三: Generator(生成器)函数.分享给大家供大家参考,具体如下: 1. 简介 ① 理解:可以把它理解成一个函数的内部状态的遍历器,每调用一次,函数的内部状态发生一次改 ...

随机推荐

  1. Waymo的激光雷达计划:进展如何?

    Waymo的激光雷达计划:进展如何? Waymo's Lidar Plan: How's It Working out? 许多自动驾驶汽车(AV)开发商一直在热烈追求激光雷达技术,这一技术之所以重要, ...

  2. pytest的allure的环境配置

    一.下载地址: https://github.com/allure-framework/allure2/releases 二.配置环境变量: 三.验证allure安装成功

  3. Github_远程仓库多人协作操作,解决冲突

    前提:假设原已有一个代码仓库,加入协作者,大家一起完成一个项目. 一.添加伙伴-->伙伴同意加入-->伙伴clone,提交代码 1.创建者进入仓库主页 ==> Settings页面 ...

  4. .h5图像文件(数据集)的读取并存储 工具贴(二)

    概述 H5文件是层次数据格式第5代的版本(Hierarchical Data Format,HDF5),它是用于存储科学数据的一种文件格式和库文件.由美国超级计算中心与应用中心研发的文件格式,用以存储 ...

  5. Kubernetes 实战——升级应用(Deployment)

    一.更新运行在 Pod 内的应用程序 1. 修改 Pod 模板 将导致应用程序在一定时间内不可用 2. 修改 Service 的 Pod 选择器 需要同时运行两倍的 Pod 3. 滚动升级 应用程序需 ...

  6. SpringCloud(1)生态与简绍

    一:微服务架构简绍学习目标 1.技术架构的演变,怎么一步步到微服务的:2.什么是微服务,优点与缺点  :3.SOA(面向服务)与MicroServices(微服务)的区别 :4.Dubbo 与Spri ...

  7. js 统计图插件chart.js

    chart是一个纯js插件,它功能强大小巧使用也很简单. 第一步引入 chart.js . <script type="text/javascript" src=" ...

  8. 你的电脑适合升级 Win11 吗?「GitHub 热点速览 v.21.26」

    作者:HelloGitHub-小鱼干 WhyNotWin11 是个有意思的项目,本以为是从 360 度"抨击" Windows 11 的不好用之处,但它是一个实实在在地从硬件角度告 ...

  9. .NetCore使用Docker安装ElasticSearch、Kibana 记录日志

    前言 最近园子里看到一篇<.Net Core with 微服务 - Elastic APM> 的文章(主要用于对接口的调用链.性能进行监控),非常实用,这里讲解.NetCore将日志写入E ...

  10. js笔记14

    1.作用域面试题 画图分析 2.DOM document object model 节点树状图 document>documentElement>body>tagname 3.我们常 ...