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用法详解

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

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

相关文章

C/C++实现植物大战僵尸(PVZ)(打地鼠版)

🚀欢迎互三👉:程序猿方梓燚 💎💎 🚀关注博主,后期持续更新系列文章 🚀如果有错误感谢请大家批评指出,及时修改 🚀感谢大家点赞👍收藏⭐评论✍ 游戏…

2022高教社杯全国大学生数学建模竞赛C题 问题一(1) Python代码演示

目录 问题 11.1 对这些玻璃文物的表面风化与其玻璃类型、纹饰和颜色的关系进行分析数据探索 -- 单个分类变量的绘图树形图条形图扇形图雷达图Cramer’s V 相关分析统计检验列联表分析卡方检验Fisher检验绘图堆积条形图分组条形图分类模型Logistic回归随机森林import matplotlib…

GAN的损失函数和二元交叉熵损失的对应及代码

以下解释为GPT生成 这里有个问题,使用二元交叉熵,的时候生成器的损失如何体现 看代码 import torch import torch.nn as nn import torch.optim as optim# 设置设备为GPU或CPU device torch.device("cuda" if torch.cuda.is_available() el…

EndnoteX9安装及使用教程

EndnoteX9安装及使用教程 一、EndNote安装 1.1 下载 这里提供一个下载链接: 链接:https://pan.baidu.com/s/1RlGJksQ67YDIhz4tBmph6Q 提取码:5210 解压完成后,如下所示: 1.2 安装 双击右键进行安装 安装比较简单…

[Web安全 网络安全]-文件读取与下载漏洞

文章目录: 一:任意文件读取漏洞 1.定义 2.危害 3.产生原因 4.发现漏洞 5.利用漏洞 6.防范措施 7.读取漏洞举例 二:任意文件下载漏洞 1.定义 2.漏洞利用 3.漏洞挖掘 4.漏洞验证 5.漏洞防御修复 pikachu靶场:是一个…

【C++11 —— 线程库】

C11 —— 线程库 thread类介绍线程函数参数原子性操作库(atomic)lock_guard与unique_lockmutex的种类lock_guardunique_lock 两个线程交替打印奇偶数 thread类介绍 在C11之前,涉及到多线程的问题,都是和平台相关的,比如windows和Linux下各有…

AI 时代程序员的应变之道

一、AI 浪潮来袭,编程界风云变幻 随着 AIGC 大语言模型如 ChatGPT、Midjourney、Claude 等的涌现,AI 辅助编程工具日益普及,程序员的工作方式正经历着深刻的变革。 分析公司 OReilly 日前发布的《2023 Generative AI in the Enterprise》报告…

【Linux基础】冯诺依曼体系结构操作系统的理解

目录 前言一,冯诺依曼体系1. 为什么有内存结构?2. 对硬件中数据流动的再理解 二,操作系统(Operator System)1. 概念2. 操作系统结构的层状划分3. 操作系统对硬件管理的理解4. 用户与操作系统的关系的理解5. 系统调用和库函数的关系6. 为什么要有操作系统…

策略路由与路由策略的区别

🐣个人主页 可惜已不在 🐤这篇在这个专栏 华为_可惜已不在的博客-CSDN博客 🐥有用的话就留下一个三连吧😼 目录 一、主体不同 二、方式不同 三、规则不同 四、定义和基本概念 一、主体不同 1、路由策略:是为了改…

android 删除系统原有的debug.keystore,系统运行的时候,重新生成新的debug.keystore,来完成App的运行。

1、先上一个图:这个是keystore无效的原因 之前在安装这个旧版本android studio的时候呢,安装过一版最新的android studio,然后通过模拟器跑过测试的demo。 2、运行旧的项目到模拟器的时候,就报错了: Execution failed…

后台数据管理系统 - 项目架构设计-Vue3+axios+Element-plus(0916)

接口文档: https://apifox.com/apidoc/shared-26c67aee-0233-4d23-aab7-08448fdf95ff/api-93850835 接口根路径: http://big-event-vue-api-t.itheima.net 本项目的技术栈 本项目技术栈基于 ES6、vue3、pinia、vue-router 、vite 、axios 和 element-plus http:/…

RabbitMQ(高阶使用)死信队列

文章内容是学习过程中的知识总结,如有纰漏,欢迎指正 文章目录 一、什么是死信队列? 二、死信队列使用场景 三、死信队列如何使用 四、打车超时处理 1.打车超时实现 以下是本篇文章正文内容 一、什么是死信队列? 先从概念解释上搞…

idea插件推荐之Cool Request

Cool Request是一款基于IDEA的HTTP调试工具,可以看成是轻量版的postman,它会自动扫描项目代码中所有API路径,按项目分组管理。一个类被定义为Controller且其中的方法被RequestMapping或者XXXMapping注解标注以后就会被扫描到。 对应方法左侧会…

C++中一般指针,指针数组,数组指针

凤凰台上凤凰游,凤去台空江自流。 吴宫花草埋幽径,晋代衣冠成古丘。 三山半落青天外,二水中分白鹭洲。 总为浮云能蔽日,长安不见使人愁。 ——《登金陵凤凰台》【唐】李白 今天是中秋节,小编在这里祝大家学业有成&…

自然语言处理实战项目全解析

自然语言处理(NLP)作为人工智能领域的重要分支,正日益受到关注。无论是在智能客服、文本分析,还是情感分析等场景,NLP都扮演着至关重要的角色。在这篇博客中,我将分享几个与热门搜索主题贴近的实战项目案例…

ElasticSearch数据类型和分词器

一、数据类型 1、Text (文本数据类型) 2、Keyword(关键字数据类型) 3、Alias(别名类型) 4、Arrays (集合类型) 5、日期类型 6、Numeric (数值数据类型) 7、Boolean&#xff0…

智能硬件从零开始的设计生产流程

文章目录 市场分析团队组建ID设计结构设计pcba设计软件开发手板EVT开模DVTPVTMP 智能硬件研发是一个复杂的过程, 当然一件事要发出萌芽必须得有人, 有一天,几个合伙人凑在一起,说一起开发个智能硬件产品吧,于是故事开始了. 市场分析 合伙人: 万物互联的时代, 智能音箱已经成为…

Docker和K8S

Docker技术可以将生成的镜像,在docker容器中运行。Build Once Run Anywhere K8s是对容器集群进行管理协调的工具 一个K8S集群 有一个master节点和多个node节点 master节点里面有 1、etcd:文件保存集群各个节点的状态数据,配置数据等。使用raf…

递归10小题

注:操作数字的数组均为int [ ]型,操作字符串均为char [ ]型 下面的10个问题很常见,在这里都是用递归解决的。涉及到数组的问题,需要有指针的知识。 1.求1到n的和 int getSum(int n)//求1到n的和 {if(n1){return 1;}return ngetS…

LDR6020,单C口OTG,充放一体新潮流!

PD(Power Delivery)芯片实现单Type-C接口输入和输出OTG(On-The-Go)功能,主要是通过支持USB Power Delivery规范和OTG功能的特定硬件和软件设计来实现的。以下是对这一过程的具体解释: 一、PD芯片基础功能 …