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

ES6解构赋值详解;全面掌握:JavaScript解构赋值的终极指南

目录

全面掌握:JavaScript解构赋值的终极指南

一、数组解构赋值

1、基本用法

2、跳过元素

3、剩余元素

4、默认值

二、对象解构赋值

1、基本用法

2、变量重命名

3、默认值

4、嵌套解构

三、复杂的嵌套结构解构

四、函数参数解构赋值

1、对象解构作为函数参数

2、带有默认值的函数参数解构

五、解构赋值中的交换变量

六、解构赋值与遍历

1、解构数组中的对象

七、结合 rest 运算符

八、处理函数返回的对象或数组

九、实际应用中的注意事项

1、属性不存在时的情况

2、深度解构可能导致错误

十、总结


作者:watermelo37

涉及领域:Vue、SpingBoot、Docker、LLM、python等

-----------------------------------------------------------------------------------

-------温柔地对待温柔的人,包容的三观就是最大的温柔。-------

-----------------------------------------------------------------------------------

全面掌握:JavaScript解构赋值的终极指南

        解构赋值(Destructuring Assignment)是 ES6(ECMAScript 2015) 引入的一种强大且灵活的语法,允许将数组或对象中的数据提取到变量中。它可以极大地简化从复杂数据结构中获取数据的过程。在以下内容中,我将详细解释解构赋值的语法及其在实践中的应用。

一、数组解构赋值

        数组解构赋值是基于数组元素的顺序,将数组中的值依次赋值给对应的变量。

1、基本用法

const arr = [10, 20, 30];const [a, b, c] = arr;console.log(a); // 输出: 10
console.log(b); // 输出: 20
console.log(c); // 输出: 30

2、跳过元素

const arr = [10, 20, 30];const [a, , c] = arr;console.log(a); // 输出: 10
console.log(c); // 输出: 30

3、剩余元素

        使用剩余运算符 (...) 获取数组中的其余元素(这里要注意区分剩余运算符和拓展运算符噢)。

const arr = [10, 20, 30, 40];const [a, ...rest] = arr;console.log(a);    // 输出: 10
console.log(rest); // 输出: [20, 30, 40]

4、默认值

        当解构的数组没有足够的元素时,可以为变量提供默认值。

const arr = [10];const [a, b = 20] = arr;console.log(a); // 输出: 10
console.log(b); // 输出: 20

二、对象解构赋值

        对象解构赋值是基于属性名的匹配,将对象属性的值赋给变量。

1、基本用法

const obj = { name: 'Alice', age: 25 };const { name, age } = obj;console.log(name); // 输出: Alice
console.log(age);  // 输出: 25

2、变量重命名

        可以将对象属性的值赋给一个新的变量名。

const obj = { name: 'Alice', age: 25 };const { name: n, age: a } = obj;console.log(n); // 输出: Alice
console.log(a); // 输出: 25

3、默认值

        如果对象中没有该属性,可以为变量提供默认值。

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

4、嵌套解构

        可以解构嵌套的对象或数组。

const obj = {user: {name: 'Alice',age: 25}
};const { user: { name, age } } = obj;console.log(name); // 输出: Alice
console.log(age);  // 输出: 25

三、复杂的嵌套结构解构

        解构可以处理复杂的数据结构,组合使用数组和对象的解构语法。

const data = {id: 1,name: 'John',locations: [{city: 'New York',state: 'NY'},{city: 'San Francisco',state: 'CA'}]
};const {name,locations: [{ city: city1 },{ city: city2 }]
} = data;console.log(name);   // 输出: John
console.log(city1);  // 输出: New York
console.log(city2);  // 输出: San Francisco

四、函数参数解构赋值

        在函数的参数中使用解构赋值,可以使函数更具可读性,特别是当参数是对象或数组时。

1、对象解构作为函数参数

function greet({ name, age }) {console.log(`Hello, ${name}. You are ${age} years old.`);
}const person = { name: 'Alice', age: 25 };greet(person); // 输出: Hello, Alice. You are 25 years old.

2、带有默认值的函数参数解构

function greet({ name = 'Anonymous', age = 0 } = {}) {console.log(`Hello, ${name}. You are ${age} years old.`);
}greet(); // 输出: Hello, Anonymous. You are 0 years old.

五、解构赋值中的交换变量

        解构赋值可以简洁地交换两个变量的值,而不需要使用临时变量。

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

六、解构赋值与遍历

        解构赋值可以与 for-of 循环结合使用,来遍历对象或数组。

1、解构数组中的对象

const users = [{ name: 'Alice', age: 25 },{ name: 'Bob', age: 30 }
];for (const { name, age } of users) {console.log(`${name} is ${age} years old.`);
}// 输出:
// Alice is 25 years old.
// Bob is 30 years old.

七、结合 rest 运算符

        解构赋值可以与 rest 运算符结合使用,用于提取剩余的属性。

const obj = { a: 1, b: 2, c: 3 };const { a, ...rest } = obj;console.log(a);    // 输出: 1
console.log(rest); // 输出: { b: 2, c: 3 }

八、处理函数返回的对象或数组

        解构赋值可以用于处理函数返回的复杂对象或数组,使得函数调用更加简洁。

function getUserInfo() {return {name: 'Alice',age: 25,location: {city: 'New York',state: 'NY'}};
}const {name,location: { city }
} = getUserInfo();console.log(name); // 输出: Alice
console.log(city); // 输出: New York

九、实际应用中的注意事项

1、属性不存在时的情况

        如果解构的对象中不存在某个属性,变量的值将是 undefined,因此使用默认值是一个好习惯。

const obj = { name: 'Alice' };const { name, age } = obj;console.log(age); // 输出: undefined

2、深度解构可能导致错误

        深度嵌套的解构可能会导致 undefined 错误,因此在实际应用中要谨慎。

const obj = { name: 'Alice' };// 错误:Cannot destructure property 'age' of 'undefined' as it is undefined.
const { name, age: { year } } = obj;

        在复杂数据结构中,务必确保数据的完整性,或为对象提供默认值。

十、总结

        解构赋值是一个强大且灵活的工具,它使得从数组和对象中提取数据变得更加简单和直观。通过掌握解构赋值的基本语法和实践,你可以写出更加简洁、可读性更强的代码。在实际项目中,解构赋值广泛应用于函数参数处理、变量交换、嵌套结构操作等场景,极大地提升了代码的灵活性和简洁度。

        只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~

        更多优质内容,请关注:

        你真的会使用Vue3的onMounted钩子函数吗?Vue3中onMounted的用法详解

        通过array.filter()实现数组的数据筛选、数据清洗和链式调用

        el-table实现动态数据的实时排序,一篇文章讲清楚elementui的表格排序功能

        极致的灵活度满足工程美学:用Vue Flow绘制一个完美流程图

        shpfile转GeoJSON且控制转化精度;如何获取GeoJSON?GeoJson结构详解

        Docker 入门全攻略:安装、操作与常用命令指南

        通过array.reduce()实现数据汇总、条件筛选和映射、对象属性的扁平化、转换数据格式等

        巧用Array.forEach:简化循环与增强代码可读性

        Mapbox添加行政区矢量图层、分级设色图层、自定义鼠标悬浮框、添加天地图底图等

        管理数据必备!侦听器watch用法详解

相关文章:

ES6解构赋值详解;全面掌握:JavaScript解构赋值的终极指南

目录 全面掌握:JavaScript解构赋值的终极指南 一、数组解构赋值 1、基本用法 2、跳过元素 3、剩余元素 4、默认值 二、对象解构赋值 1、基本用法 2、变量重命名 3、默认值 4、嵌套解构 三、复杂的嵌套结构解构 四、函数参数解构赋值 1、对象解构作为函…...

2-73 基于matlab的weber能量法求解齿轮时变啮合刚度的程序

基于matlab的weber能量法求解齿轮时变啮合刚度的程序,能够跑出刚度图,通过求解轮齿部分变形、基体变形及局部接触变形这三部分的变形,进而求得综合弹性变形,最终求出时变啮合刚度。程序已调通,可直接运行。 2- 73 齿轮…...

[C++]set和map的介绍及使用

关于set和map的接口函数部分&#xff0c;只重点介绍一些相较于别的容器有特殊地方的接口&#xff0c;set和map的接口可以触类旁通。 一、概念 &#xff08;一&#xff09;、关联式容器 关联式容器存储的元素是一个个的键值对<key,value>。通过键&#xff08;key&#x…...

【MySQL】MySQL学习笔记(持续更新)

1. 安装MySQL&#xff08;windows环境&#xff09; &#xff08;1&#xff09;在http://www.mysql.com下载*.msi的安装文件&#xff0c;并运行安装&#xff1a; 如&#xff1a;mysql-installer-community-8.0.39.0.msi 全部安装包含如下内容&#xff1a; …...

ArcGIS如何将投影坐标系转回为地理坐标系

有时候两个数据&#xff0c;一个为投影坐标系&#xff0c;另一个为地理坐标系时&#xff0c;在GIS软件中位置无法叠加到一起&#xff0c;这需要将两个或多个数据的坐标系统一&#xff0c;可以直接将地理坐标系的数据进行投影&#xff0c;或将投影坐标系转为地理坐标系。下面介绍…...

Parallels Desktop 19 for Mac 安装虚拟机需要激活吗

Parallels Desktop 19 for Mac 乃是一款适配于 Mac 的虚拟化软件。它能让您在 Mac 计算机上同时运行多个操作系统。您可借此创建虚拟机&#xff0c;并于其中装设不同的操作系统&#xff0c;如 Windows、Linux 或 macOS。使用 Parallels Desktop 19 mac 版时&#xff0c;您可在 …...

wps题注为表格或图片编号

word中为表格添加题注&#xff1a; 问题&#xff1a;多次或多人编辑导致--序号不能联动更新&#xff08;域代码不一致,如图&#xff09; 所以是否可以批量替换word里的域代码&#xff1f;如果可以这问题就解决了————失败 解决办法&#xff1a; 如图&#xff0c;复制表头&…...

集成测试怎么做?

任何产品想要长期保持高质量运行&#xff0c;集成测试正是实现这一目标必不可少的工具。 本文重点介绍集成测试实现的流程&#xff0c;而非测试工具本身。我们的目的是聚焦于创建测试过程中你可能遇到的问题&#xff0c;以便你能自主地推进工作。 缺陷的成本 细节决定成败&a…...

java mybatis 使用work id

在 MyBatis-Plus 中&#xff0c;如果你想要使用 WORK_ID 作为 ID 生成策略的一部分&#xff0c;通常是指使用雪花算法&#xff08;Snowflake Algorithm&#xff09;的一种变体来生成全局唯一 ID。雪花算法能够生成一个递增的 64 位整数作为 ID&#xff0c;这种 ID 在分布式系统…...

MySQL 的子查询(Subquery)

在数据库查询中&#xff0c;有时候我们需要从一个查询的结果集中获取数据&#xff0c;再将这些数据作为另一个查询的一部分来使用。MySQL 提供了子查询&#xff08;Subquery&#xff09;这一强大工具&#xff0c;帮助我们实现嵌套查询&#xff0c;从而解决复杂的数据检索需求。…...

后端Web之数据库(以MySQL为例)

目录 1.概述 2.MySQL 3.DDL 4.DML 5.DQL 1.概述 对于我们自己写的一些小功能&#xff0c;数据一般存储在文件中&#xff0c;比如XML文件。而在实际项目中&#xff0c;数据都是存放在数据库中的。数据库&#xff08;DataBase &#xff09;是一个存储数据的集合&#xff0c…...

委托发布 | 进迭时空联合移动云能力中心实现业界首个RISC-V IO虚拟化方案

仟江水商业电讯&#xff08;8月22日 北京 委托发布&#xff09;虚拟化是云计算技术基石&#xff0c;是RISC-V走进云计算等高性能计算场景的必然要求。RISC-V国际基金会2021年制定了Hypervisor 1.0规范&#xff0c;2023年制定了AIA 1.0规范和IOMMU 1.0规范&#xff0c;这3个规范…...

3-Electron打开新窗口,并跳转到指定的路由

需要配置路由。src/router/index.js {path: "/selectMode",name: "selectMode",component: () > import("//view/selectMode/index.vue"),},src/**.vue import { ipcRenderer } from "electron";const openNewTab () > {let p…...

comfyUI和SD webUI都有哪些差别呢?

ComfyUI和SD WebUI都是用于AI绘画的用户界面&#xff0c;它们各自有着不同的特点和适用场景。以下是两者之间的一些关键差别&#xff1a; 1、用户体验与界面友好性: SD WebUI&#xff08;Stable Diffusion Web User Interface&#xff09;以其直观易用著称&#xff0c;特别受初…...

MySql中常用的sql语句大全(工作常用篇)

1. DDL 1.1 操作数据库 --创建库 create database 库名;--创建库时判断库是否存在&#xff0c;不存在则创建 create database if no exists 库名;--查看所有数据库 show databases;--使用指定数据库 use 库名;--查看当前指定数据库包含的数据表 show tables;--查看数据库的结…...

React+Vis.js(03):vis.js设置节点形状

文章目录 Vis支持的形状类型代码实现完整代码实现效果Vis支持的形状类型 circle(圆形)box(盒子)dot(点)star(五角星)triangle(三角形)ellipse(椭圆形)triangleDown(倒三角形)diamond(菱形)代码实现 通过shape属性来定义每个节点的形状 const nodes = new vis…...

Pod和Deployment

一、pod Evicted状态&#xff1a; 在Kubernetes中&#xff0c;当节点资源紧张时&#xff0c;Kubelet可能会驱逐节点上的一些Pods以释放资源。当这种情况发生时&#xff0c;Pod的状态会被设置为"Evicted"。 1.pod的探针 1.就绪性探针&#xff1a; 一般用于探测容器…...

7. 数据结构—二叉树(链式存储)

1. 内容 包括链式存储二叉树的 递归与非递归实现的先序、中序以及后序遍历、层序遍历、创建二叉树、计算深度、总节点数。 2. 实现代码 注意&#xff1a;只是伪代码&#xff0c;如果想要运行的话在细节方面需要自己修正&#xff0c;栈和队列的方法实现需要引进或者使用其C自…...

AScript 的UI asui模板的导入

两种方案&#xff1a; 第一种直接在web端&#xff0c;右击UI文件夹 第二种在pycharm&#xff0c;也是右击UI文件夹 调用UI&#xff0c;在init类中直接调用即可...

Linux shell编程学习笔记75:sed命令——沧海横流任我行(下)

0 前言 在 Linux shell编程学习笔记73&#xff1a;sed命令——沧海横流任我行&#xff08;上&#xff09;-CSDN博客文章浏览阅读684次&#xff0c;点赞32次&#xff0c;收藏24次。在大数据时代&#xff0c;我们要面对大量数据&#xff0c;有时需要对数据进行替换、删除、新增、…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...