当前位置: 首页 > news >正文

web前端之ES6的实用深度解构赋值方法、复杂的解构赋值

MENU

  • 前言
  • 解构对象
  • 解构数组
  • 解构混用


前言

ES6中允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)。
使用解构赋值可以将复杂的代码整理的更加干净整洁。


解构对象

在没有使用解构之前,想要确定对象中的某些属性,那么就需要从对象中获取属性然后赋值给变量,这样会让代码显得非常冗余。

let obj = { name: "张三", age: 22 };
let name = obj.name;
let age = obj.age;// 张三 22
console.log(name, age);
// 张三 22
console.log(obj.name, obj.age);

基本解构格式

如果使用解构的话,保持将变量名和对象属性名同名才可取到值。

let { name, age } = { name: "张三", age: 22 };// 张三 22
console.log(name, age);

变量别名

如果解构的对象中,属性名和外部的变量名重名,将会报错,可以使用别名的方式进行解构。

let name = "王五";
let { name: newName, age } = { name: "张三", age: 22 };// 张三 22
console.log(newName, age);

变量默认值

如果目标对象属性中没有要解构的属性,不指定默认值,那么将会undefined,此时可以给解构变量写默认值。

let { name, age, gender = "男" } = { name: "张三", age: 22 };// 张三 22 男
console.log(name, age, gender);

此种为变量设置默认值的方法,常应用于函数参数中,加入调用函数时没传递参数,有可能会对函数运行造成错误。那就可以在形参位置进行对象解构,对变量指定默认值。

function fn({ name = '李四', age = 30 } = {}) {// 李四 30console.log(name, age);
}fn();

解构数组

解构数组和对象有些不同,解构对象的时候属性前后位置不影响。但是解构数组,需要按照索引顺序解构。


数组基础解构用法

如果在没有解构之前,需要拿到数组中的前3位字符串,那么只能按照索引值的方式定义变量。

let arr = ["HTML5", "JavaScript", "Vue", "React", "NodeJS"];
let str1 = arr[0];
let str2 = arr[1];
let str3 = arr[2];// HTML5 JavaScript Vue
console.log(str1, str2, str3);
// HTML5 JavaScript Vue
console.log(arr[0], arr[1], arr[2]);

解构赋值

let [str1, str2, str3] = ["HTML5", "JavaScript", "Vue", "React", "NodeJS"];// HTML5 JavaScript Vue
console.log(str1, str2, str3);

基于这种特性,如果一次性想要定义多个变量,就可以使用这种解构的方式定义。相当于一次性定义了三个变量并对变量进行了赋值。


选择解构

数组的特性是按照索引值顺序执行,如果只要取得数组最后几位,或者第几位,需要预留出其他值的位置。

let [, , , value1, value2] = ["HTML5", "JavaScript", "Vue", "React", "NodeJS"];// React NodeJS
console.log(value1, value2);

扩展运算符

在一个数组中解构,可以取得数组第一位,剩下的通过扩展运算符(展开运算符),统一放置到一个数组中。

let [value, ...other] = ["HTML5", "JavaScript", "Vue", "React", "NodeJS"];// HTML5 ["JavaScript", "Vue", "React", "NodeJS"]
console.log(value, other);

默认值

同上面对象别名方式一致。

let [v1, v2, v3 = "Vue"] = ["HTML5", "JavaScript"];// HTML5 JavaScript Vue
console.log(v1, v2, v3);

交换变量值

let name1 = "张三";
let name2 = "李四";[name2, name1] = [name1, name2];// 李四 张三
console.log(name1, name2);

解构混用

在实际开发中基本没有上面那种简单的结构,大多数都是比较复杂的数据结构。用好了解构赋值才会让代码看起来更加整洁。

let person = {name: "坤坤",age: 25,like: ['唱', '跳', 'rap', '篮球'],works: {music: ['Wait Wait Wait', '鸡你太美'],movies: ['童话二分之一', '鬼畜区常青树']},friend: ['丞丞', '大宝贝', '大黑牛']
};

传统型

let result = person.works.music[1];// 鸡你太美
console.log(result);

浅层解构

let { works } = person;// 鸡你太美
console.log(works.music[1]);

连续解构

let { works: { music } } = person;// 鸡你太美
console.log(music[1]);

数组与对象混用

let { works: { music: [, result] } } = person;// 鸡你太美
console.log(result);

解构+别名

let { works: { music: [, result], movies: newMov } } = person;// 鸡你太美 ["童话二分之一", "鬼畜区常青树"]
console.log(result, newMov);

相关文章:

web前端之ES6的实用深度解构赋值方法、复杂的解构赋值

MENU 前言解构对象解构数组解构混用 前言 ES6中允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)。 使用解构赋值可以将复杂的代码整理的更加干净整洁。 解构对象 在没有使用解构之前,想要确定…...

uni-app 接口封装,token过期,自动获取最新的token

一、文件路径截图 2、新建一个文件app.js let hosthttp://172.16.192.40:8083/jeecg-boot/ //本地接口 let myApi {login: ${host}wx/wxUser/login, //登录 } module.exports myApi 3、新建一个文件request.js import myApi from /utils/app.js; export const r…...

AWS免费套餐——云存储S3详解

文章目录 前言一、为什么选择S3二、费用估算三、创建S3云存储注册账户登录账户创建存储桶关于官网相关文档 总结 前言 不论个人还是企业,日常开发中经常碰到需要将文档、安装包、日志等文件数据存储到服务器的需求。往常最常用的是云服务器,但是仅仅承担…...

2723. 两个 Promise 对象相加

说在前面 🎈不知道大家对于算法的学习是一个怎样的心态呢?为了面试还是因为兴趣?不管是出于什么原因,算法学习需要持续保持。 题目描述 给定两个 promise 对象 promise1 和 promise2,返回一个新的 promise。promise1 …...

【方法论】费曼学习方法

费曼学习方法是由诺贝尔物理学奖得主理查德费曼提出的一种学习方法。这种方法强调通过将所学的知识以自己的方式解释给别人来提高学习效果。 费曼学习方法的步骤如下: 选择一个概念:选择一个要学习的概念或主题。 理解和学习:用自己的方式学…...

Transformer模型 | Pytorch实现Transformer模型进行时间序列预测

Transformer模型最初是为了处理自然语言处理任务而设计的,但它也可以用于时间序列预测。下面是将Transformer模型应用于时间序列预测的一般步骤: 数据准备:准备时间序列数据集,包括历史观测值和目标预测值。通常,你需要将时间序列转换为固定长度的滑动窗口序列,以便输入…...

Git推送大量内容导致http 413错误

Git推送大量内容导致服务端HTTP 413错误 问题描述 使用git push 大量变更内容(超过60M)时报 http 413错误,详细错误信息: Compressing objects: 100% (2907/2907), done. Writing objects: 100% (6760/6760), 64.18 MiB | 1.18…...

pytest框架的基本使用

1. 测试框架的作用 测试框架不关系用例的内容 它关心的是:用例编排和结果收集 2. pytest框架的特点 1. 适用于python语言 2. 用法符合python风格 3. 有丰富的生态 3. 安装pytest框架 1. 新建一个项目 2. 在项目终端窗口输入如下命令,用于安装py…...

C++STL之map、set的使用和模拟实现

绪论​: “我这个人走得很慢,但是我从不后退。——亚伯拉罕林肯”,本章是接上一章搜索二叉树中红黑树的后续文章,若没有看过强烈建议观看,否则后面模拟实现部分很看懂其代码原理。本章主要讲了map、set是如何使用的&am…...

100天精通鸿蒙从入门到跳槽——第18天:ArkTS组件状态管理装饰器

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通Golang》 — Go语言学习之旅!《100天精通鸿蒙》 — 从Web/安卓到鸿蒙大师!100天…...

【前端】防抖

防抖用于限制连续触发的事件的执行频率。当一个事件被触发时,防抖会延迟一定的时间执行对应的处理函数。如果在延迟时间内再次触发了同样的事件,那么之前的延迟执行将被取消,重新开始计时 场景 :用户输入 项目中遇到的场景,需要鼠标悬浮在图表的时候,将ToolsTip里的数据…...

python对图片或文件的操作

一. base64 与图片的相互转换 1. base64 转图片 import base64 from io import BytesIO from PIL import Image# base64 编码的图像数据(示例) base64_data "iVBn9DHASKJDjDsdSADSf8lgg"# 将 base64 编码的字符串解码为二进制数据 binary_d…...

架构篇19:单服务器高性能模式-Reactor与Proactor

文章目录 ReactorProactor小结上篇介绍了单服务器高性能的 PPC 和 TPC 模式,它们的优点是实现简单,缺点是都无法支撑高并发的场景,尤其是互联网发展到现在,各种海量用户业务的出现,PPC 和 TPC 完全无能为力。今天我将介绍可以应对高并发场景的单服务器高性能架构模式:Rea…...

PyInstaller 将 Python 程序生成可直接运行的程序

图标转换地址:https://convert.app/#google_vignette 官方文档:https://readthedocs.org/projects/pyinstaller/downloads/pdf/stable/#page20 安装pyinstaller pip install pyinstaller执行打包 pyinstaller -i ./resource/w.icns -w -F whv.py --a…...

专有钉钉开发记录,及问题总结

先放几个专有钉钉开发文档 专有钉钉官网的开发指南 服务端(后端)api文档 前端api文档 前端开发工具下载地址 小程序配置文件下载地址 后端SDK包下载地址 专有钉钉域名是openplatform.dg-work.cn 开发记录 开发专有钉钉时有时会遇到要使用钉钉的api;通过 my 的方…...

Java Swing桌面项目打包成可执行jar

前言 最近有需求,将Swing项目打包为一个可执行的jar包,遇见了一些问题,参考AI助手,解决了遇到的问题,也有一些亲身实践体会,记录一下。开发环境IntelliJ IDEA,JDK8,用kotlin语言实现…...

python数组反转的几种方式

python数组的反转可以有好几种方式,基于python语言的强大表现能力和丰富的特性,总结以下几种。 首先给定一个基本数组: d [1, 2, 3, 4, 5, 6] 1. reversed函数 reversed 是python的内建函数,会将原数组进行反转(但不影响原数组本身的序列…...

算法每日一题: 最大合金数 | 二分

大家好,我是星恒,今天给大家带来的是一道比较正常的二分题目 题目:leetcode 2861假设你是一家合金制造公司的老板,你的公司使用多种金属来制造合金。现在共有 n 种不同类型的金属可以使用,并且你可以使用 k 台机器来制…...

jvm优化过程

1.top命令执行查看,当前占比比较高的进程,可以看到21660这个进程的cpu占比已经100%了 编辑 2.可以定位到那个微服务的进程,可以看到是fs服务 编辑 3.执行 top -p 21660,然后按下大写的H,可以看到21772这个线程占比最高 编辑 4.…...

《Docker极简教程》--目录

一、前言 本书的目的和目标Docker的简介 二、Docker基础 Docker的历史和发展Docker的工作原理Docker的主要组件 三、Docker环境的搭建 在Windows上搭建Docker环境在Mac上搭建Docker环境在Linux上搭建Docker环境 四、Docker镜像 Docker镜像的概念Docker镜像的创建和使用D…...

嵌入式第十二天!(指针数组、指针和二维数组的关系、二级指针)

1. 指针数组: int *a[5]; char *str[5]; 指针数组主要用来操作字符串数组,通常将指针数组的每个元素存放字符串的首地址实现对多个字符串的操作。 二维数组主要用来存储字符串数组,通过每行存储一个字符串,多行存储多个字符串所组…...

俄罗斯方块游戏设计文档(基于C语言)

1. 引言 本设计文档旨在详细规划基于C语言开发的俄罗斯方块游戏的整体架构、功能模块以及具体实现步骤。这款游戏将通过控制下落的几何形状方块,以填充和消除行的方式进行,旨在提供用户友好的界面与流畅的游戏体验。 2. 需求分析 - 核心元素 - 方块&a…...

【解决】IntelliJ IDEA 重命名 Shift + F6 失效

IntelliJ IDEA 重命名 Shift F6 失效 问题解决 问题 Idea 重命名 Shift F6 ,一直没反应 解决 调查发现原因是微软新版的输入法冲突了。需要设置【使用以前版本的微软拼音输入法】解决兼容性。 设置 -> 时间和语言 -> 区域 -> 语言选项 -> 键盘选项…...

Unknown encoder ‘libmp3lame

环境: macos m1 , python3.10.x 背景 做视频切片, 使用moviepy 中VideoFileClip进行截取视频。 报错: Unknown encoder libmp3lameThe audio export failed because FFMPEG didnt find the specified codec for audio encoding …...

Android升级版本兼容问题

1、JDK的选择 AndroidJavaAPI and language features supported14 (API 34)17Core libraries13 (API 33)11Core libraries12 (API 32)11Java API11 and lowerAndroid versions https://developer.android.com/build/jdks The following table lists which version of Gradle…...

微信生成带参数二维码(用户id), 扫码可获取用户id

生成带参数的二维码: https://developers.weixin.qq.com/doc/offiaccount/Account_Management/Generating_a_Parametric_QR_Code.html 示例代码: /*** 生成带参数的二维码** param userId 用户id* return*/GetMappingRequestMapping("/createTicket/{userId}")pu…...

微信小程序(二十一)css变量-定义页面主题色

注释很详细,直接上代码 上一篇 新增内容: 1.使用css变量 2.消除按钮白块影响 3.修改图标样式 源码: npmTest.json {"navigationStyle": "custom","usingComponents": {//引入vant组件"van-nav-bar"…...

WSL2 Debian系统添加支持SocketCAN

本人最近在使用WSL2,Linux系统选择的是Debian,用起来很不错,感觉可以代替VMware Player虚拟机。 但是WSL2 Debian默认不支持SocketCAN,这就有点坑了,由于本人经常要使用SocketCAN功能,所以决定让Debian支持…...

Redis的五种常用数据结构以及其底层实现

1.字符串 字符串作为Redis中最基础的数据结构,他存储的值可以是任何东西,可以是字符串,数字,二进制,但是字符串存储的值不能超过512M 在Redis中字符串的底层编码是根据值进行改变的 当存储的字符串是一个数字的时候…...

防御保护笔记

防火墙的主要职责在于:控制和防护 --- 安全策略 --- 防火墙可以根据安全策略来抓取流量之 后做出对应的动作。 防火墙分类: 包过滤防火墙: 1,很多安全风险集中在应用层的,所以,仅关注三四层的数据无法做到…...