ES6 解构赋值详解

ES6是JavaScript语言的一次重大更新,引入了许多新特性和语法改进,其中解构赋值是一个非常实用和灵活的语法特性。它可以让我们从数组或对象中提取值,并赋给对应的变量,让代码变得更加简洁和易读。本文将深入探讨ES6解构赋值的语法、用法及其在实际开发中的应用。

jgfz.jpg

数组解构赋值

数组解构赋值允许我们通过类似模式匹配的方式,从数组中提取值并赋给变量,即只要等会两边的变量模式相同,左边的变量就会被赋予对应的值。

// 基本赋值
let [x,j] = [1,2]
console.log(x)  //1
console.log(j)  //2

// 基本赋值
let [a,b,c] = [1,[2,3],4]
console.log(a)  //1
console.log(b)  //[2,3]
console.log(c)  //4

//结构不成功,值为undefined
let [d] = []
console.log(d)  //undefined

//不完全解构,等会左边的值只能匹配一部分右边的数组
let [e,f,g] = [5,6]
console.log(e)  //5
console.log(f)  //6
console.log(g)  //undefined

//默认值
let [k=8,l=8] = [1]
console.log(k)  //1 解构成功则值为解构的值
console.log(l)  //8 解构不成功则值默认的值

//等号右边的数据不具有可迭代的能力
let [h] = true  //报错 TypeError: true is not iterable

通过数组结构等号右边的数据结构必须具有iterator接口,否则报错TypeError: true is not iterable,如果变量未能结构成功,则变量的值为设置的默认值,若未设置默认值,则为undefined

对象解构赋值

对象解构赋值允许我们从对象中提取属性,并将它们赋给对应的变量。

// 基本赋值
let { name, age } = { name: 'XJ', age: 30 };
console.log(name); //  XJ
console.log(age);  //  30
//变量重命名
let { name:userName, age:userAge } = { name: 'XJ', age: 30 };
console.log(userName); //  XJ
console.log(userAge);  //  30
console.log(age); //  此时name和age是模式,并非变量,报错:ReferenceError: age is not defined
//默认值
let { name, age,desc='handsome' } = { name: 'XJ', age: 30 };
console.log(name); //  XJ
console.log(age);  //  30
console.log(desc); //  handsome
//对数组进行对象属性的解构
let{0:first,2:third} = [7,8,9];
console.log(first); // 7 0的属性对应的值为数组下标为0的值
console.log(third); // 9 2的属性对应的值为数组下标为2的值

在函数参数中使用解构赋值

解构赋值也可以用于函数的参数中,方便地获取传入对象的属性值。

printUser({ name, age }) {
  console.log(`${name} is ${age} years old.`);
}

let user = { name: 'XJ', age: 30 };
this.printUser(user); // XJ is 30 years old.

解构赋值的应用场景

  • 交换变量的值
let [a, b] = [1,2];
[a, b] = [b, a];
console.log(a); // 2
console.log(b); // 1
  • 从函数返回多个值
userInfo(){
    return { name: 'XJ', age: 30 };
}

let { name, age } = this.userInfo();
console.log(name); // XJ
console.log(age);  // 30
  • 提取JSON数据
let user = {
  name: 'XJ',
  age: 30
};
let { name, age } = user;
console.log(name); // XJ
console.log(age);  // 30

总结

ES6的解构赋值为JavaScript带来了更多的灵活性和可读性,使得我们能够更优雅地处理数据。无论是处理数组、对象,还是在函数参数中使用,解构赋值都能让我们的代码更加简洁和易于维护。掌握好这一特性,对于提升JavaScript编程能力是非常重要的一步。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ROS | 常见故障排查

1.开启后发出一个WIFI WIFI名字:WHEELTEC接数字 安全密钥:dongguan 2.显示屏接口 USB接口接键鼠 3.远程登录命令 ssh -Y wheeltec192.168.0.100 是小车发出的WIFI的一个IP地址 4. 登录后确保IP地址 ip a 看一下 当前ip地址 倒数第四行-当前ip地址 1…

简易部署的设备日志采集工具

永久免费: Gitee下载 最新版本 使用说明: Moretl 企业级采集文件工具 优势: A. 开箱即用. 解压直接运行.不需额外安装. B. 批管理设备. 设备配置均在后台管理. C. 无人值守 客户端自启动,自更新. D. 稳定安全. 架构简单,内存占用小,通过授权访问.

数据结构---二叉树前中后序遍历

1. 某完全二叉树按层次输出(同一层从左到右)的序列为 ABCDEFGH 。该完全二叉树的前序序列为() A: ABDHECFG B: ABCDEFGH C: HDBEAFCG D: HDEBFGCA 2. 二叉树的先序遍历和中序遍历如下:先序遍历: EFHIGJK; 中序遍历: HFIEJKG. 则二叉…

[数据集][目标检测]药片药丸检测数据集VOC+YOLO格式152张1类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):152 标注数量(xml文件个数):152 标注数量(txt文件个数):152 标注类别…

企业级Web项目中应该如何做单元测试、集成测试和功能测试?

先自我介绍下: 本人有过10年测试经验,也参与过公安部网络安全产品测试交付、华为4G 网络设备测试交付、腾讯QQ空间APP产品测试交付。 关于“企业级Web项目中应该如何做单元测试、集成测试和功能测试”这个问题,我想给大家唠唠,我…

Django数据驾驶舱

Django数据驾驶舱 1.项目介绍2.项目结构3.库表结构3.1 appcsdn的models3.2 appssq的models3.3 appweather的models3.4 appweibo的models 4.功能展示5.解决问题5.1 路由配置5.2 后端数据与前端echarts展示5.3 长图表丝滑滚动条 6.遗留问题7.资源分享 1.项目介绍 这里介绍本人最…

excel数据透视

Excel中,数据透视图(PivotChart)和数据透视表(PivotTable)是两个紧密相关的工具,用于分析数据。数据透视表是数据透视图的数据源,也就是说,数据透视图是基于数据透视表中的数据创建的…

判断题无答案22届期末复习

判断: 1-3.结构体变量不能进行整体输入输出。 1-4.不同类型的结构变量之间也可以直接赋值。 1-5假设结构指针p已定义并正确赋值,其指向的结构变量有一个成员是int型的num,则语句 (*p).num = 100; 等价于p->num=1…

Linux下多进程访问同一个共享库处理流程

两个测试程序实现调用同一个SO库: ​​​​​​​ #include <stdio.h> #include "a/a.h" #include <unistd.h> int main() { int a = 4,b = 5; sum(a, b); int ret = get(); printf("ret=%d\n", ret); sleep(100)…

如何用好swoole/webman/workerman/hyperf呢

Webman框架的依赖 "require": { "php": ">7.2", "workerman/webman-framework": "^1.5.0",// "monolog/monolog": "^2.0" }, 依赖的核心框架也是很久的了 webman-framework的核心依赖 &q…

Ubuntu下FastDDS的源码编译和简单测试

FastDDS是eprosima公司开发的DDS&#xff08;Data Distribution Service&#xff09;库&#xff0c;使用的语言是C&#xff0c;自称是"The Most Complete Open Source DDS Middleware"&#xff0c;其官网是https://eprosima.com/&#xff0c;FastDDS源码在https://gi…

【面试干货】HashSet 和 TreeSet 的区别

【面试干货】HashSet 和 TreeSet 的区别 1、实现方式HashSetTreeSet 2、性能添加、删除和查找操作的时间复杂度HashSetTreeSet 3、元素唯一性4、迭代顺序HashSetTreeSet 5、使用场景HashSetTreeSet 6、示例代码 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不…

Android 屏幕旋转 处理 AsyncTask 和 ProgressDialog 的最佳方案

初始化数据 */ private void initData(Bundle savedInstanceState) { if (savedInstanceState ! null) mDatas savedInstanceState.getStringArrayList(“mDatas”); if (mDatas null) { mLoadingDialog new LoadingDialog(); mLoadingDialog.show(getFragmentMana…

AI网络爬虫:搜狗图片的时间戳反爬虫应对策略

如何批量爬取下载搜狗图片搜索结果页面的图片&#xff1f;以孙允珠这个关键词的搜索结果为例&#xff1a; https://pic.sogou.com/pics?query%E5%AD%99%E5%85%81%E7%8F%A0&mode2 翻页规律如下&#xff1a; https://pic.sogou.com/napi/pc/searchList?mode2&start38…

Python: HexBinDecOct

因为&#xff1a; f0b1001110# 十进制 int()a0*2**01*2**11*2**21*2**30*2**40*2**51*2**6print(a)# 八进制 oct()print(78/8,78%8)# 110 001 001 8 116print(1*2**00*2**10*2**2,1*2**00*2**10*2**2,0*2**01*2**11*2**2)#十六进制 hex()#0 100 1110 16 4Eprint(sixteenFoo(0*…

2024-06-23 编译原理实验5——目标代码生成

文章目录 一、实验要求二、实验设计三、实验结果四、附完整代码 补录与分享本科实验&#xff0c;以示纪念。 一、实验要求 在词法分析、语法分析、语义分析和中间代码生成程序的基础上&#xff0c;将C−−源代码翻译为MIPS32指令序列&#xff08;可以包含伪指令&#xff09;&…

Windows程序设计课程作业-3(文件并发下载)

目录 目录 1.作业内容 2.作业要求 3.主要思路 1&#xff09;窗体和组件初始化 2&#xff09;下载管理器实例化 3&#xff09;按钮点击事件处理 4&#xff09;窗体加载事件处理 5&#xff09;下载消息处理 4.主要难点 1&#xff09;多线程管理&#xff1a; 2&#xff09…

理解傅里叶变换不同的数学表达形式

文章目录 前言一、三角函数分解形式推导&#xff1a;1.正交性&#xff1a;2.系数求解&#xff1a;1.A02.an&#xff0c;bn 二、指数形式1.推导与三角形式的对应关系&#xff1a; 2.信号与系统中的概念1.|Cn|是第n次谐波的幅度2.φn是第n次谐波的相位3.谐波分量 文章来源 前言 …

OPENCV中0x00007FFE5F35F39C发生异常

原因&#xff1a;读取图片时已经为灰度图像&#xff0c;又进行了一次灰度处理cvtColor 解决方法&#xff1a;如上图所示&#xff0c;将cv::imread的第二个参数改为cv::IMREAD_COLOR&#xff1b;或者保留cv::IMREAD_GRAYSCALE&#xff0c;删去后面的cv::cvtColor

Flutter开发环境搭建和调试

[你的Flutter文件夹路径]\flutter\bin 这样我们的Flutter SDK的环境变量就配置完毕了。接下来在命令提示符窗口中输入命令&#xff1a; flutter doctor 它可以帮助我们检查Flutter环境变量是否设置成功&#xff0c;Android SDK是否下载以及配置好环境变量等等。如果有相关的…