ES解构的使用

文章目录

  • 1 概念
  • 2 数组解构
  • 3 对象结构

1 概念

解构是ES6中引入的一个新语法特性,它是一种按照一定模式从数组或对象中提取值,对变量进行赋值的行为。解构可以被视为一种结构化赋值方法,用于简化从数据结构(如数组或对象)中提取信息的过程。

解构主要有两种形式:数组解构和对象解构。

2 数组解构

数组解构是ES6中一个非常有用的特性,它允许你按照数组的结构直接提取值并赋值给变量。以下是一些数组解构的例子:

基本数组解构

const [first, second, third] = [1, 2, 3];  console.log(first);  // 输出:1  
console.log(second); // 输出:2  
console.log(third);  // 输出:3

交换变量值
数组解构的一个常见用法是交换两个变量的值。

let a = 1;  
let b = 2;  [a, b] = [b, a];  console.log(a); // 输出:2  
console.log(b); // 输出:1

解构嵌套数组
你可以对嵌套数组进行解构。

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

解构不完全匹配数组
如果解构的变量少于数组的元素,那么剩余的元素会被忽略。

const [x, y] = [1, 2, 3];  console.log(x); // 输出:1  
console.log(y); // 输出:2

设置默认值
如果解构的数组中的某些位置没有值,你可以为变量指定默认值。

const [first = 10, second] = [undefined, 2];  console.log(first);  // 输出:10  
console.log(second); // 输出:2

使用rest运算符
rest运算符…可以收集数组中剩余的元素到一个新的数组中。

const [first, ...rest] = [1, 2, 3, 4, 5];  console.log(first);  // 输出:1  
console.log(rest);   // 输出:[2, 3, 4, 5]

解构与迭代结合
你可以结合解构和数组的迭代方法来处理数组。

const arr = [[1, 2], [3, 4], [5, 6]];  for (const [num1, num2] of arr) {  console.log(num1, num2);  
}  
// 输出:  
// 1 2  
// 3 4  
// 5 6

这些例子展示了数组解构的多种用法,包括基本解构、交换变量值、解构嵌套数组、不完全匹配解构、设置默认值、使用rest运算符以及解构与迭代结合。数组解构可以大大简化代码,特别是在处理数组元素时,能够直接提取所需的值,提高代码的可读性和可维护性。

3 对象结构

当然可以。对象解构是ES6中非常有用的特性,它允许你直接从对象中提取所需的属性并赋值给变量。下面是一些对象解构的例子:

基本对象解构

const person = {  name: 'Alice',  age: 30,  job: 'Engineer'  
};  
const { name, age, job } = person;  
console.log(name); // 输出:Alice  
console.log(age);  // 输出:30  
console.log(job);  // 输出:Engineer

重命名属性
如果你想要将解构出来的变量重命名,可以使用冒号:来指定新的变量名。

const person = {  firstName: 'Alice',  lastName: 'Smith'  
};  
const { firstName: name, lastName: surname } = person;  
console.log(name);      // 输出:Alice  
console.log(surname);   // 输出:Smith

解构嵌套对象
当对象内部包含其他对象时,你也可以进行嵌套解构。

const user = {  name: 'Bob',  address: {  street: '123 Main St',  city: 'New York',  zip: '10001'  }  
};  const { name, address: { street, city } } = user;  console.log(name);     // 输出:Bob  
console.log(street);   // 输出:123 Main St  
console.log(city);     // 输出:New York

设置默认值
当解构的对象中某些属性不存在时,你可以为变量指定默认值。

const person = {  name: 'Alice'  
};  const { name, age = 25 } = person;  console.log(name); // 输出:Alice  
console.log(age);  // 输出:25(因为age在person对象中不存在,所以使用默认值25)

解构函数返回值
当函数返回一个对象时,你可以直接在函数调用时解构这个对象。

function getPerson() {  return {  name: 'Alice',  age: 30  };  
}  const { name, age } = getPerson();  console.log(name); // 输出:Alice  
console.log(age);  // 输出:30

解构剩余属性
使用剩余模式(rest pattern)…,你可以获取对象中未被解构的属性。

const person = {  name: 'Alice',  age: 30,  country: 'USA'  
};  const { name, ...rest } = person;  console.log(name);  // 输出:Alice  
console.log(rest);  // 输出:{ age: 30, country: 'USA' }

这些例子展示了对象解构的多种用法,包括基本解构、重命名属性、嵌套解构、设置默认值、解构函数返回值以及解构剩余属性。这些功能使得代码更加简洁和清晰,同时减少了不必要的中间变量和代码行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/824296.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MFC下CPictureCtrl控件基于鼠标左键坐标的直线绘图

本文仅供学习交流,严禁用于商业用途,如本文涉及侵权请及时联系本人将于及时删除 目录 1.创建自定义类CMyPictureCtrl 2.布局Dlg 3.实验代码 4.运行结果 在基于对话框的MFC应用程序中,通过鼠标操作获取坐标并在CPictureCtrl控件中使用Lin…

【软件测试】单元测试+集成测试+系统测试

以下是来自“文心一言”搜索的回答 单元测试 单元测试是软件开发中的一种测试方法,用于对软件中的最小可测试单元进行测试。这些最小单元通常是函数、方法或类等代码片段。单元测试的目的是验证每个单元的代码是否按预期工作,确保其功能正确&#xff0…

极化码的编码

引言 极化码是一种比较特殊的线性分组码,同时其还是一种信道专属编码,在极化码的编码构造方案中,每种不同的信道都有属于自己特定的编码构造方式,而当给定一种具体的信道环境时,极化码的构造方案还是与其他的线性分组码比较的类似,极化码的编码码字也是通过信息序列乘以生…

05 MySQL 之 表的约束、视图、事务

1. CONSTRAINT 约束 创建表时,可以给表的字段添加约束,可以保证数据的完整性、有效性。比如大家上网注册用户时常见的:用户名不能为空。对不起,用户名已存在。等提示信息。 约束包括: 非空约束:not null检…

通过Idea部署Tomcat服务器

1.在idea中创建项目 有maven构建工具就创建maven,没有就正常创建一个普通的java程序 创建普通java项目 2.添加框架 3.配置 Tomcat 注意:创建web项目后我们需要配置tomcat才能运行,下面我们来进行配置。 4.添加部署 回到服务器 5.完善配置 6…

小程序如何优化搜索排名,获取曝光

在移动互联网时代,小程序以其便捷、轻量级的特点,逐渐成为用户获取服务的重要渠道。然而,小程序数量众多,如何让自己的小程序在搜索中脱颖而出,获取更多的曝光和流量,成为众多开发者关注的焦点。 一、理解…

DC-8渗透测试复现

DC-8渗透测试复现 目的: 获取最高权限以及flag 过程: 信息打点--sql注入- 命令执行反弹shell-exim4提权 环境: 攻击机:kali(192.168.85.137) 靶机:DC_3(192.168.85.140) 复现: 一.信息收集 nmap -…

Golang:三种引号详解-单引号、双引号、反引号

Golang限定字符或者字符串一共三种引号: 单引号(),单个字符,更类似于C语言中的char类型, 双引号("") ,字符串,单行的,多个字符(字母数字)。 反引…

在报表控件 FastReport .NET 中使用 PageCreate 事件

FastReport Business Graphics .NET,是一款基于fastreport报表开发控件的商业图形库,借助 FastReport 商业图形库,您可以可视化不同的分层数据,构建业务图表以进行进一步分析和决策。利用数据呈现领域专家针对 .NET 7、.NET Core、…

栈和队列——数据结构学习笔记

栈和队列 栈(Stack) 定义与特点 栈是一种特殊的线性表,只能从一端进行插入和删除——>后进后出 LIFO结构 表尾(an) 称为栈顶Top 表头(a1)称为栈底Base 插入元素到栈顶的操作称为入栈 删除栈顶最后一个元素的操作称为出栈 抽象类型定义 ADT Stack{ 数据对…

编译OpenWRT固件

前言 编译环境,我是使用Ubuntu16.04.07 LTS 64位版 1.安装Ubuntu16.04.07 LTS 64 Ubuntu16.04.07 LTS 64安装的时候会出现一个bug,如果开始安装界面选了中文之后就会出现 提示错误信息:无法安装busybox-initramfs,向目标系统中…

openlayers 入门教程(六):controls 篇

目录 一、常用的控件 二、使用控件方法 三、添加删除control 的基本方法 四、control示例 1 比例尺 - ScaleLine 2 鹰眼/缩小图 - OverviewMap 3 全屏 - FullScreen 4 版权信息 - Attribution 5 旋转地图 - Rotate 6 放大缩小 - Zoom 7 缩放滑块控件 - ZoomSlider …

【Day 1】HTML 与 CSS

1 前端 网站的工作流程: 首先我们需要通过浏览器访问发布到前端服务器中的前端程序,这时候前端程序会将前端代码返回给浏览器浏览器得到前端代码,此时浏览器会将前端代码进行解析,然后展示到浏览器的窗口中,这时候我…

pwn - 零基础ROP之Android ARM 32位篇(新修订)

一、环境搭建 安装ndk r10e,必须得这个版本,其他版本可能导致 -fno-stack-protector 不生效! r10e Darwin: https://dl.google.com/android/repository/android-ndk-r10e-darwin-x86_64.zipLinux: https://dl.google.com/android/repository/android-ndk-r10e-linux-x86_6…

51-41 Stable Video Diffusion,高质量视频生成新时代

23年11月,Stability AI公司公开了稳定视频扩散模型Stable Video Diffusion(SVD)的代码和权重,视频生成迎来了新时代。SVD是一种潜在扩散模型,支持文本生成视频、图像生成视频以及物体多视角3D合成。从工程角度来看,本文主要提出了…

Real3DPortrait照片对口型,数字人,音频/视频驱动数字人

先看效果 上传一张图片和一段音频,照片如下: 合成后效果如下: 照片对口型-音频驱动 支持音频驱动和视频驱动,视频可以使照片有参照视频中的口型和和动作。 项目地址 https://github.com/yerfor/Real3DPortrait 我的环境 win…

[网络安全]-059-安全大模型以及训练数据集

Contents Tools IntegratedAuditReconnaissanceOffensiveDetectingPreventingSocial EngineeringReverse EngineeringInvestigationFixAssessmentCases ExperimentalAcademicB

真有立即做出40+BI零售数据分析报表的方案?

有,奥威BI零售数据分析方案是一套标准化的BI方案,预设零售数据分析模型和BI报表,点击应用后,将自动从系统中取数,并根据方案的预设计算分析指标、分析数据,并生成让人快速理解数据情况的BI数据可视化报表。…

Spark/SparkSQL读取Hadoop LZO文件概述

一、前置配置 IDEA Maven安装配置 Scala(可选) Java Hadoop.dll(可能需要,具体看有无相关错误信息) hadoop-lzo-0.xx.xx.jar(如果你的版本过高,需要到官网下载高版本,mvnrepository仓…

服务器中毒怎么办?企业数据安全需重视

互联网企业: 广义的互联网企业是指以计算机网络技术为基础,利用网络平台提供服务并因此获得收入的企业。广义的互联网企业可以分为:基础层互联网企业、服务层互联网企业、终端层互联网企业。 狭义的互联网企业是指在互联网上注册域名,建立网…