JavaScript解构赋值完全手册

🧑‍🎓 个人主页:《爱蹦跶的大A阿》

🔥当前正在更新专栏:《VUE》 、《JavaScript保姆级教程》、《krpano》

​ 

目录

✨ 前言

第一节:解构赋值的基本用法

第二节:对象解构赋值

 第三节:数组解构赋值

第四节:参数中的解构赋值

4.1 对象解构:

4.2 数组解构:

第五节:嵌套解构赋值

5.1 对象嵌套解构:

5.2 数组嵌套解构:

 

第六节:解构赋值的应用

第七节:从函数返回多个值

第八节:定义函数参数

第九节:处理JSON数据

第十节:遍历Map和Set

第十一节:参数默认值

✨ 结语   


 

✨ 前言

        ES6中新增的解构赋值(Destructuring Assignment)是一种便捷获取属性和赋值的特性。它可以让我们以更直观的方式处理对象和数组,极大地提高了开发效率。本文将全面介绍解构赋值的用法及运用技巧,让你在JavaScript编码中如虎添翼。

通过本文,你将学到:

  • 解构赋值的基本语法和规则
  • 如何快速从对象和数组中取值
  • 在函数参数中使用解构赋值的好处
  • 灵活运用默认值和嵌套解构
  • 解构赋值提高代码可读性的实际例子

让我们开始学习这一极大提高了JavaScript开发效率的语法糖吧!

第一节:解构赋值的基本用法

解构赋值可以让我们使用变量快速获取对象或数组的属性/元素。

对象解构:

let person = {name: 'Jack',age: 20
};let { name, age } = person;
// name = 'Jack', age = 20

数组解构:

let arr = [1, 2];
let [a, b] = arr; 
// a = 1, b = 2

解构赋值遵循匹配的模式,可以忽略不需要的部分。

第二节:对象解构赋值

对象解构可以指定需要的属性:

let person = {name: 'Jack',age: 20,gender: 'male' 
};let { name, age } = person;
//只取name和age属性

可以赋值给新变量名:

let { name: fullName, age: personAge } = person; 
// fullName = 'Jack'
// personAge = 20

 可以设置默认值:

let { name='Tom', age} = person;
// name = 'Jack', age = 20

 第三节:数组解构赋值

数组解构遵循位置匹配:

let arr = [1, 2, 3];
let [a, ,b] = arr;
// a=1, b=3

剩余元素可以用...rest语法收集:

let [a, ...rest] = [1, 2, 3]; 
// a = 1, rest = [2, 3]

 同样可以设置默认值:

let [a=10, b] = [undefined, 2];
// a = 10, b = 2

第四节:参数中的解构赋值

解构赋值可以用于函数的参数,方便访问对象属性或数组元素。

4.1 对象解构:

 

function print({ name, age }) {console.log(name, age);
}let person = { name: 'Jack',age: 20
};print(person); 
// 'Jack' 20

4.2 数组解构:

function sum([a, b]) {return a + b;
}sum([10, 20]); // 30

这使函数语义更加清晰,一目了然。

第五节:嵌套解构赋值

解构赋值可以递归嵌套使用。

5.1 对象嵌套解构:

let person = {name: 'Jack',age: 20,address: {city: 'New York',state: 'NY'}
};let { name, address: { city } } = person;
// name = 'Jack', city = 'New York'

5.2 数组嵌套解构:

let arr = [1, 2, [3, 4]];
let [a, , [b]] = arr;
// a = 1, b = 3

 

嵌套解构可以访问多层对象属性。

第六节:解构赋值的应用

解构赋值在实际开发中有很多运用场景,可以使我们的代码更简洁高效。

  • 交换变量的值
    [a, b] = [b, a];

  • 从函数返回多个值
  • 函数参数的定义
    • 提取JSON数据
    • 遍历Map和Set等

第七节:从函数返回多个值

解构赋值可以让我们从函数方便地返回多个值:

function getPerson() {return {name: 'Jack',age: 20}; 
}let { name, age } = getPerson();

不需要再定义复杂的对象。

第八节:定义函数参数

解构可以方便地定义函数参数:

function print({ name, age}) {// ...
}print({ name: 'Jack',age: 20
})

 避免再函数体内部重复获取name和age。

第九节:处理JSON数据

解构赋值可以快速提取JSON对象的数据:

let json = {code: 200,data: {name: 'Jack',age: 20}
}let { code, data: { name } } = json;
// code = 200, name = 'Jack'

第十节:遍历Map和Set

解构可以遍历Map和Set:

let map = new Map([['a', 1], ['b', 2]]);for (let [key, value] of map) {// ...
}

        解构赋值在实际项目中应用广泛,能大幅提高开发效率。需要多加练习,以巩固掌握。

以上介绍了解构赋值的主要用法,如还有疑问,欢迎提出讨论!

第十一节:参数默认值

在解构赋值时可以为参数设置默认值:

function print({name, age=20}) {// ...
}print({name: 'Jack'}); // age=20

这可以使参数可选,增加了函数的灵活性。

第十二节:注意事项

  • 对象需要声明的变量名与属性同名
  • 数组需要对应位置
  • 嵌套解构可以多层提取
  • 不完全解构也可以只取需要的部分

需要注意匹配的模式,才能正确获取值。

第十三节:浏览器兼容性

解构赋值是ES6引入的特性,老版本浏览器可能还不支持。

可以通过编译器转换为ES5代码,或使用polyfill提高兼容性。

现代浏览器基本都已支持解构赋值,但还是需要考虑低版本浏览器。

✨ 结语   

解构赋值提高了访问对象和数组值的便捷性,使代码更加简洁。

需要理解其匹配模式,运用自如才能发挥最大效用。

解构赋值已经成为JavaScript不可或缺的重要特性,值得我们深入学习运用。

以上内容概括了解构赋值的全方位知识,如还有任何问题,欢迎在评论讨论!

    

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

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

相关文章

Qt基础-QtGlobal常用的全局函数及随机数产生实例

目录 一、全局函数定义 二、应用上面的函数产生一个随机数 三、随机数实例

java8 Stream()流 list转map

List<User> list new ArrayList<>();User user1 new User();user1.setUserId("1");user1.setUserName("李四1");list.add(user1);User user2 new User();user2.setUserId("2");user2.setUserName("李四2");list.add(us…

Fluids —— MicroSolvers DOP

目录 Gas SubStep —— 重复执行对应的子步 Switch Solver —— 切换解算器 Gas Attribute Swap —— 交换、复制或移动几何体属性 Gas Intermittent Solve —— 固定时间间隔计算子解算器 Gas External Forces —— 计算外部力并更新速度或速度场 Gas Particle Separate…

【linux】tcpdump 使用

tcpdump 是一个强大的网络分析工具&#xff0c;可以在 UNIX 和类 UNIX 系统上使用&#xff0c;用于捕获和分析网络流量。它允许用户截取和显示发送或接收过网络的 TCP/IP 和其他数据包。 一、安装 tcpdump 通常是默认安装在大多数 Linux 发行版中的。如果未安装&#xff0c;可…

竞赛保研 基于深度学习的人脸表情识别

文章目录 0 前言1 技术介绍1.1 技术概括1.2 目前表情识别实现技术 2 实现效果3 深度学习表情识别实现过程3.1 网络架构3.2 数据3.3 实现流程3.4 部分实现代码 4 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的人脸表情识别 该项目较…

2023年12 月电子学会Python等级考试试卷(六级)答案解析

青少年软件编程(Python)等级考试试卷(六级) 分数:100 题数:38 一、单选题(共25题,共50分) 1. 运行以下程序,输出的结果是?( ) class A(): def __init__(self,x): self.x=x+1 def b(self): return self.x*self.x t=A(3) print(t.b())

Baumer工业相机堡盟工业相机如何联合NEOAPI SDK和OpenCV实现获取图像并对图像进行边缘检测(C++)

Baumer工业相机堡盟工业相机如何联合NEOAPI SDK和OpenCV实现获取图像并对图像进行边缘检测&#xff08;C&#xff09; Baumer工业相机Baumer工业相机使用OpenCV对图像进行边缘检测的技术背景在NEOAPI SDK里使用OpenCV建立边缘检测功能在NEOAPI SDK里使用边缘检测功能对图像进行…

网络基础面试题(二)

11.什么是网桥&#xff1f;防火墙的端口防护是指什么&#xff1f; 网桥是一种网络设备&#xff0c;用于连接两个或多个局域网&#xff08;LAN&#xff09;并转发数据包。它能够根据MAC地址来识别和转发数据&#xff0c;提高网络的传输效率和安全性。 防火墙的端口防护是指对防火…

prometheus 黑盒监控

黑盒监控 “白盒监控” 是需要把对应的Exporter程序安装到被监控的目标主机上&#xff0c;从而实现对主机各种资源以及状态的数据采集工作 ”黑盒监控“ 是不需要把Exporter程序部署到被监控的目标主机上&#xff0c;比如全球的网络质量的稳定性&#xff0c;通常用ping操作&am…

2019年认证杯SPSSPRO杯数学建模A题(第一阶段)好风凭借力,送我上青云全过程文档及程序

2019年认证杯SPSSPRO杯数学建模 纸飞机在飞行状态下的运动模型 A题 好风凭借力&#xff0c;送我上青云 原题再现&#xff1a; 纸飞机有许多种折法。世界上有若干具有一定影响力的纸飞机比赛&#xff0c;通常的参赛规定是使用一张特定规格的纸&#xff0c;例如 A4 大小的纸张…

数据结构——队列(Queue)

目录 1.队列的介绍 2.队列工程 2.1 队列的定义 2.1.1 数组实现队列 2.1.2 单链表实现队列 2.2 队列的函数接口 2.2.1 队列的初始化 2.2.2 队列的数据插入&#xff08;入队&#xff09; 2.2.3 队列的数据删除&#xff08;出队&#xff09; 2.2.4 取队头数据 2.2.5 取队…

让车辆做到“耳听八方”,毫米波雷达芯片与系统设计

摘要: 毫米波雷达,是指工作在毫米波波段(一般为30~300GHz频域,波长1~10mm)探测的雷达。毫米波雷达体积小、质量轻、空间分辨率高,穿透“雾烟灰”的能力强,还具备全天候全天时工作的优势。在智能网联汽车体系中,毫米波雷达是系统感知层不可或缺的重要硬件,能让智能驾…

python匹配问题

脏数据匹配 一般数据建模步骤中&#xff0c;数据清洗耗时占比80%以上&#xff0c;因为现实中接触到的数据相当脏&#xff0c;无法直接简单的用pandas的merge函数解决。下面以QS大学排名的匹配为例&#xff0c;简单介绍脏数据匹配中会遇到的问题和主要步骤。 1 问题描述 给定…

Django全文搜索

Django ORM允许你执行简单的匹配操作&#xff0c;例如contains过滤器&#xff08;或者不区分大小写的icontains&#xff09;。 比如查询正文中包含django的文章 from blog.models import Post Post.objects.filter(body__containsframework) 但是如果希望执行复杂的搜索查询&…

Vue.js设计与实现阅读2

Vue.js设计与实现阅读-2 1、前言2、框架设计的核心要素2、1 提升用户体验2、2 控制代码体积2、3 Tree-Shaking2、4 特性开关2、5 错误处理 1、前言 上一篇我们了解到了 命令式和声明式的区别&#xff0c;前者关注过程&#xff0c;后者关注结果了解了虚拟dom存在的意义&#x…

WPF常用技巧-多线程处理

WPF支持单线程单元模型&#xff0c;该模型与在Windows窗体应用程序中使用的模型非常类似&#xff0c;具有以下几条原则&#xff1a; WPF元素具有线程关联性。创建WPF元素的线程拥有所创建的元素&#xff0c;其他线程不能直接与这些WPF元素进行交互。WPF对象都在类层次的某个位…

Java后端开发——SSM整合实验

文章目录 Java后端开发——SSM整合实验一、常用方式整合SSM框架二、纯注解方式整合SSM框架 Java后端开发——SSM整合实验 一、常用方式整合SSM框架 1.搭建数据库环境&#xff1a;MySQL数据库中创建一个名称为ssm的数据库&#xff0c;在该数据库中创建一个名称为tb_book的表 …

CAD数据转pcl可读数据

//-----------------------读取CAD模型------------------------vtkSmartPointer<vtkSTLReader> reader vtkSmartPointer<vtkSTLReader>::New();reader->SetFileName("data.stl");reader->Update();//----------------------转出到poly格式------…

如何顺滑使用华为云编译构建平台?

这两年平台构建服务需求越来越大&#xff0c;却一直苦于找不到一些指南&#xff0c; 这里特意写了一篇&#xff0c; 对在学习代码阶段和新手程序员朋友也蛮友好&#xff0c; 配置真的也不难&#xff0c; 也特别适合想尝试从0到1做个APP的朋友了。 以华为云的CodeArts Build为例…

CCF模拟题 202303-1田地丈量

问题描述 试题编号&#xff1a; 202303-1 试题名称&#xff1a; 田地丈量 时间限制&#xff1a; 1.0s 内存限制&#xff1a; 512.0MB 问题描述&#xff1a; 西西艾弗岛上散落着 n 块田地。每块田地可视为平面直角坐标系下的一块矩形区域&#xff0c;由左下角坐标 (x1,y1) 和右…