解构 和 展开运算符

embedded/2024/9/24 6:34:47/

解构 {name,age}=obj

1. 数组解构

数组解构是将数组的单元值快速批量赋值给一系列变量的简洁语法,如下代码所示:

<script>javascript">// 普通的数组let arr = [1, 2, 3];// 批量声明变量 a b c// 同时将数组单元值 1 2 3 依次赋值给变量 a b clet [a, b, c] = arr;console.log(a); // 1console.log(b); // 2console.log(c); // 3
</script>

用剩余参数解决

总结:

  1. 赋值运算符 = 左侧的 [] 用于批量声明变量,右侧数组的单元值将被赋值给左侧的变量

  2. 变量的顺序对应数组单元值的位置依次进行赋值操作

  3. 变量的数量大于单元值数量时,多余的变量将被赋值为 undefined

  4. 变量的数量小于单元值数量时,可以通过 ... 获取剩余单元值,但只能置于最末位
    在这里插入图片描述

  5. 允许初始化变量的默认值,且只有单元值为 undefined 时默认值才会生效
    在这里插入图片描述6. 按需导入,忽略某些返回值
    在这里插入图片描述7. 多维数组的结构
    在这里插入图片描述

注:支持多维解构赋值,比较复杂后续有应用需求时再进一步分析

补充:js前面必须加分号的两种情况

  1. 立即执行函数
    在这里插入图片描述

  2. 数组解构
    在这里插入图片描述

  3. [1,2,3].map
    在这里插入图片描述

2. 对象解构

对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法,如下代码所示:

  1. 基本用法
<script>javascript">// 普通对象const user = {name: "小明",age: 18,};// 批量声明变量 name age// 同时将数组单元值 小明  18 依次赋值给变量 name  ageconst { name, age } = user;console.log(name); // 小明console.log(age); // 18
</script>

在这里插入图片描述
注意:对象解构可以顺序不一致

 const user = {nameOld: "小明",ageOld: 18,};// 可以顺序不一致const { ageOld: age, nameOld: name } = user;console.log(name); // 小明console.log(age); // 18
  1. 对象解构的变量名可以重新改名
    旧变量名:新变量名
const obj1 = {name111: "slx",age1111: 12,
};const { name111: name, age111: age } = obj1;
console.log("name", name);
console.log("age", age);
  1. 数组对象解构
    在这里插入图片描述4. 多级解构
    在这里插入图片描述

总结:

  1. 赋值运算符 = 左侧的 {} 用于批量声明变量,右侧对象的属性值将被赋值给左侧的变量
  2. 对象属性的值将被赋值给与属性名相同的变量
  3. 对象中找不到与变量名一致的属性时变量值为 undefined
  4. 允许初始化变量的默认值,属性不存在或单元值为 undefined 时默认值才会生效

注:支持多维解构赋值

<body><script>javascript">// 1. 这是后台传递过来的数据const msg = {code: 200,msg: "获取新闻列表成功",data: [{id: 1,title: "5G商用自己,三大运用商收入下降",count: 58,},{id: 2,title: "国际媒体头条速览",count: 56,},{id: 3,title: "乌克兰和俄罗斯持续冲突",count: 1669,},],};// 需求1: 请将以上msg对象  采用对象解构的方式 只选出  data 方面后面使用渲染页面// const { data } = msg// console.log(data)// 需求2: 上面msg是后台传递过来的数据,我们需要把data选出当做参数传递给 函数// const { data } = msg// msg 虽然很多属性,但是我们利用解构只要 data值function render({ data }) {// const { data } = arr// 我们只要 data 数据// 内部处理console.log(data);}render(msg);// 需求3, 为了防止msg里面的data名字混淆,要求渲染函数里面的数据名改为 myDatafunction render({ data: myData }) {// 要求将 获取过来的 data数据 更名为 myData// 内部处理console.log(myData);}render(msg);</script>
</body>

展开 …obj/arr

使用场景1:合并对象

const obj1 = {name: "slx",age: 11,
};const obj2 = {clsss: "jk",sex: "f",name: "dddd",
};const obj3 = { ...obj1, ...obj2 };
console.log("obj3", obj3);

在这里插入图片描述

使用场景2:合并数组

const arr1 = [1, 2, 3, 4];
const arr2 = [5, 6, 7];
console.log([...arr1, ...arr2]);

在这里插入图片描述

使用场景3: 数组求最大值

const arr = [1, 2, 3, 4];
console.log(Math.max(...arr)); // 也就是...arr ==== 1,2,3,4// 错误写法:
console.log(Math.max(arr)); // 不能直接对数组求最大值

在这里插入图片描述

例子:黑马P111

从res中解构data,再从data中解构base64和key
在这里插入图片描述

综合使用

const obj = { name: "slx", age: 22, sex: "w" };const { name, ...newobj } = obj;
console.log("name", name);
console.log("newobj", newobj);

在这里插入图片描述


http://www.ppmy.cn/embedded/7143.html

相关文章

【zml】vp9 vp8

目录 问题 方案 知识点 研究过程 源码编译的可能 按编译源码测试 2024-4-17 问题 所有 的机型 中&#xff0c;就海思芯片的有这个问题。应该是它的h264的编解码 问题&#xff0c;所以目前是让它以vp9在推流就没有问题。 但zlm对于vp9的录相是没有实现的。 所以目前现状…

鸿蒙原生应用元服务-访问控制(权限)开发Stage模型向用户申请授权

一、向用户申请授权 当应用需要访问用户的隐私信息或使用系统能力时&#xff0c;例如获取位置信息、访问日历、使用相机拍摄照片或录制视频等&#xff0c;应该向用户请求授权。这需要使用 user_grant 类型权限。在此之前&#xff0c;应用需要进行权限校验&#xff0c;以判断当前…

十大开源机器人 智能体

1- Poppy 网址 https://www.poppy-project.org/en/ 2- Nao 网址:https://www.aldebaran.com/en/nao 3- iCub 网址: https://icub.iit.it/

开发语言漫谈-rust

前面介绍C语言家族时忘掉了rust&#xff0c;紧急补一篇。我们称C语言家族是指他们的语法相似&#xff0c;类似这样的&#xff1a; if(){}else{}就是C家族的。C、C的传统领域就是系统底层、硬件接口方向。C/C没有垃圾内存回收机制&#xff0c;完全靠程序员的自觉天赋&#xff0…

DDoS攻击趋势分析及防御建议:网络安全新挑战与应对策略

在数字化日益普及的今天&#xff0c;网络安全问题日益凸显。其中&#xff0c;分布式拒绝服务&#xff08;DDoS&#xff09;攻击以其巨大的破坏力和难以防范的特性&#xff0c;发起简单、效果显著、难以追踪等特点&#xff0c;因此被黑客广泛使用&#xff0c;已经成为网络安全领…

2024团体程序设计天梯赛L1-101 别再来这么多猫娘了!

题目链接L1-101 别再来这么多猫娘了&#xff01; #include<iostream> #include<stdio.h> #include<string.h> #include<string> #include<algorithm> using namespace std; string s[105], text; int n, k, ans, a[5005];int main() { // ios::s…

HarmonyOS开发实例:【任务延时调度】

介绍 本示例使用[ohos.WorkSchedulerExtensionAbility] 、[ohos.net.http]、[ohos.notification] 、[ohos.bundle]、[ohos.fileio] 等接口&#xff0c;实现了设置后台任务、下载更新包 、保存更新包、发送通知 、安装更新包实现升级的功能。 效果预览 使用说明 安装本应用之…

【UnityShader预备知识】内置变量和函数

一、转换 名称值UNITY_MATRIX_MVP当前模型 * 视图 * 投影矩阵。UNITY_MATRIX_MV当前模型 * 视图矩阵。UNITY_MATRIX_V当前视图矩阵。UNITY_MATRIX_P当前投影矩阵。UNITY_MATRIX_VP当前视图 * 投影矩阵。UNITY_MATRIX_T_MV模型转置 * 视图矩阵。UNITY_MATRIX_IT_MV模型逆转置 *…