JS 扩展运算符有哪些使用场景?

ops/2024/9/19 23:30:07/ 标签: javascript, 前端

你好,我是沐爸,欢迎点赞、收藏、评论和关注。

扩展运算符有哪些使用场景?直接进入正题

一、复制数组

javascript">const a1 = [1, 2];// 写法一
const a2 = [...a1];
// 写法二
const [...a2] = a1;

二、合并数组

javascript">const part1 = [1, 2, 3];  
const part2 = [4, 5, 6];  
const all = [...part1, ...part2];  
console.log(all); // 输出: [1, 2, 3, 4, 5, 6]

三、数组去重

javascript">const numbers = [1, 2, 2, 3, 3, 4, 5, 5];  
const uniqueNumbers = [...new Set(numbers)];  
console.log(uniqueNumbers); // 输出: [1, 2, 3, 4, 5]

四、函数参数数量不固定

javascript">function sum(...numbers) {  return numbers.reduce((total, current) => total + current, 0);  
}  console.log(sum(1, 2, 3, 4, 5)); // 输出: 15

五、函数剩余参数

javascript">function sum(x, ...numbers) {  return numbers.reduce((total, current) => total + current, 0);  
}  console.log(sum(1, 2, 3, 4, 5)); // 输出: 14

六、将类数组转为真数组

javascript">// arguments对象
function foo() {const args = [...arguments];
}// NodeList对象
[...document.querySelectorAll('div')]

七、将数组转为参数序列

javascript">function add(x, y) {return x + y;
}const numbers = [4, 38];
add(...numbers) // 42

八、获取数组最大值或最小值

javascript">const numbers = [1, 2, 3, 4, 5];  
const max = Math.max(...numbers);  
console.log(max); // 输出: 5  const min = Math.min(...numbers);  
console.log(min); // 输出: 1

九、剩余元素组成的数组

javascript">const [first, ...rest] = [1, 2, 3, 4, 5];  
console.log(first); // 输出: 1  
console.log(rest); // 输出: [2, 3, 4, 5]

十、字符串转为数组

javascript">const str = "hello";  
const letters = [...str];  
console.log(letters); // 输出: ['h', 'e', 'l', 'l', 'o']

十一、浅拷贝对象

javascript">const obj1 = { a: 1, b: 2 };  
const obj2 = { ...obj1 };  
console.log(obj2); // 输出: { a: 1, b: 2 }  

注意:如果obj1的属性值是对象,那么obj2中对应的属性将是一个引用,而不是一个新的对象。

十二、浅拷贝对象并添加新属性

javascript">const person = {  name: 'John',  age: 30,  gender: 'male'  
}; 
// 复制对象并添加新属性  
const personWithJob = {  ...person,  job: 'Developer'  
};  
console.log(personWithJob);
// 输出: { name: 'John', age: 30, gender: 'male', job: 'Developer' }  

十三、添加和修改原对象属性

javascript">let person = {  name: 'John',  age: 30,  gender: 'male'  
}; 
// 复制对象并添加新属性  
person = {  ...person, age: 31,job: 'Developer'  
};  
console.log(person);
// 输出: { name: 'John', age: 31, gender: 'male', job: 'Developer' }  

十四、合并对象

javascript">const obj1 = { a: 1, b: 2 };  
const obj2 = { b: 3, c: 4 };  
const mergedObj = { ...obj1, ...obj2 };  
console.log(mergedObj); // 输出: { a: 1, b: 3, c: 4 }  
// 注意:如果有同名属性,后面的属性会覆盖前面的属性

十五、剩余键值对组成的对象

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

十六、注意事项

1.如果将扩展运算符用于数组赋值,只能放在参数的最后一位,否则会报错。

javascript">const [...butLast, last] = [1, 2, 3, 4, 5];
// 报错const [first, ...middle, last] = [1, 2, 3, 4, 5];
// 报错

2.在对象中解构赋值时,必须是最后一个参数,否则会报错。

javascript">let { ...x, y, z } = someObject; // 句法错误
let { x, ...y, ...z } = someObject; // 句法错误

3.复制数组和拷贝对象时,都是浅拷贝。

javascript">// 数组
const a1 = [{ foo: 1 }];
const a2 = [{ bar: 2 }];const a3 = a1.concat(a2);
const a4 = [...a1, ...a2];a3[0] === a1[0] // true
a4[0] === a1[0] // true// 对象
const original = { a: 1, b: { c: 2 } };  // 使用扩展运算符进行浅拷贝  
const copy = { ...original };  
console.log(copy); // 输出: { a: 1, b: { c: 2 } }    
original.a = 10;  
console.log(copy.a); // 输出: 1    
original.b.c = 20;  
console.log(copy.b.c); // 输出: 20,证明对象类型属性是引用复制(浅拷贝)

好了,分享结束,谢谢点赞,下期再见。


http://www.ppmy.cn/ops/110922.html

相关文章

Python 数学建模——ARMA 时间序列分析

文章目录 前言使用前提平稳性检验白噪声检验 用法代码实例第一步——平稳性分析方法一方法二方法三 第二步——白噪声分析第三步——确定参数第四步——模型构建与检验检验模型效果预测未来数据 前言 常见的时间序列分析方法有很多,之前介绍了一个稍微新颖的 Prophe…

HarmonyOS开发者基础认证试题

文章目录 一、HarmonyOS介绍二、DevEco Studio的使用三、ArkTS语法介绍四、应用程序框架基础五、从简单的页面开始六、构建更加丰富的页面七、从网络获取数据八、保存应用数据 一、HarmonyOS介绍 判断题: 1.“一次开发,多端部署”指的是一个工程&#x…

【GBase 8c V5_3.0.0 分布式部署(单机安装)】

GBase 8c数据库分布式形态采用share nothing的分布式架构,计算节点和存储节点分离。节点间通过高速网络进行通信,所有节点都有主从互备,确保系统的极致高可用。 本文主要包含GBase 8c V5_3.0.0 分布式部署(单机安装)的简单流程,供…

AI创意引擎:优化Prompt提示词的高效提问技巧

AI内容创作的精髓:提示词(Prompt) 在AI领域中,提示词(Prompt)是与模型沟通的关键工具。提示词不仅决定了AI生成内容的方向和质量,还在优化模型输出、提升用户体验中扮演着至关重要的角色。因此…

【pgAdmin4】使用psql命令行执行查询时,使用占位符(:v1)传入参数

目录 0.环境 1.相关知识点 2.举例 3.详细操作 0.环境 windows11 pgAdmin4 8.10 1.相关知识点 占位符如何理解? SQL语句中的占位符是一种用于代表参数的特殊符号,通常以"?"或":"开头。它们被用来构建可重用的SQL语句&#xff0…

Grafana 汉化

点击 Home -> Administration 点击 Default preferences 点击 中文(简体)后点击 Save 即可

遥感技术在生态系统碳储量、碳收支、碳排放、碳循环以及人为源排放反演等领域的技术发展,实践角度解决遥感技术在生态、能源、大气等领域的碳排放监测及模拟问题

卫星遥感具有客观、连续、稳定、大范围、重复观测的优点,已成为监测全球碳盘查不可或缺的技术手段,卫星遥感也正在成为新一代 、国际认可的全球碳核查方法。本教程的目的就是梳理碳中和与碳达峰对卫星遥感的现实需求,系统总结遥感技术在生态系…

唯徳知识产权管理系统 DownloadFileWordTemplate 文件读取漏洞复现

0x01 产品简介 唯徳知识产权管理系统,由深圳市唯德科创信息有限公司精心打造,旨在为企业及代理机构提供全方位、高效、安全的知识产权管理解决方案。该系统集成了专利、商标、版权等知识产权的全面管理功能,并通过云平台实现远程在线办公,提升工作效率。是一款集知识产权申…

Radware Alteon 负载均衡-基于URL Filetype的七层负载均衡

作者:Xiaolei Ren Radware Alteon作为一款高性能的负载均衡器,其基于URL Filetype的七层负载均衡功能为众多企业提供了灵活、高效的解决方案。 该案例实现如下需求:当客户端访问服务器时,默认访问10.200.1.100,在ht…

快手自研Spark向量化引擎正式发布,性能提升200%

Blaze 是快手自研的基于Rust语言和DataFusion框架开发的Spark向量化执行引擎,旨在通过本机矢量化执行技术来加速Spark SQL的查询处理。Blaze在快手内部上线的数仓生产作业也观测到了平均30%的算力提升,实现了较大的降本增效。本文将深入剖析blaze的技术原…

Anaconda 安装与使用教程

Anaconda 安装与使用教程 介绍 Anaconda 是一个用于科学计算的 Python 和 R 的发行版,它包含了众多流行的科学计算、数据分析、机器学习等领域的库。本教程旨在帮助初学者快速上手 Anaconda,并学会如何使用其管理环境以及安装包。 第一步:…

Linux下的gcc与gdb

目录 Linux下的gcc与gdb 代码编译与链接 函数库 gdb介绍和安装 gdb基本使用指令 示例代码 debug模式和release模式 基本指令 进入gdb调试与显示调试代码 创建断点与删除断点 启用和禁用断点 执行代码 逐语句和逐过程调试 断点跳转 显示指定变量以及对应内容 打印变量的值 执行到…

代码随想录算法day30 | 动态规划算法part03 | 01背包问题 二维 ,01背包问题 一维,416. 分割等和子集

正式开始背包问题,背包问题还是挺难的,虽然大家可能看了很多背包问题模板代码,感觉挺简单,但基本理解的都不够深入。 背包问题,力扣上没有原题,题目是在卡码网找的 动态规划:01背包理论基础 本…

简单易懂的方式来解释机器学习(ML)和深度学习(DL)的区别与联系

让我们从多个角度出发,用一些简单易懂的方式来解释机器学习(ML)和深度学习(DL)的区别与联系。 1. 概念上的区别 机器学习 想象一下你在教一个小孩子如何分辨猫和狗。你可能会给这个孩子看很多猫和狗的照片&#xff…

Unity-Time类

目录 Time.timeScale Time.deltaTime Time.unscaledDeltaTime Time.time Time.frameCount Time.fixedDeltaTime Time.timeScale 时间缩放比例 时间停止 Time.timeScale 0; //回复正常 //Time.timeScale 1; //2倍速 …

VSCode 离线安装中文语言包

1.插件市场 Extensions for Visual Studio family of products | Visual Studio Marketplace 输入: language 在version history里面下载相应的版本,若没有就下载最新的 在下面安装 安装完重启就可以了。 可能会提示的失败: Unable to ins…

【vscode】 快速生成react组件

在VSCode中快速生成React组件的方法主要包括使用内置的代码片段和安装第三方插件。以下是具体的步骤和方法: 使用内置代码片段‌ VSCode支持用户自定义代码片段,你可以通过输入特定的前缀,然后按下Tab键,来快速生成React组件的基…

Cenos7镜像+Docker问题

前言 好用的镜像 阿里 curl -o /etc/yum.repos.d/Centos7-aliyun.repo https://mirrors.wlnmp.com/centos/Centos7-aliyun-x86_64.repo科大 curl -o /etc/yum.repos.d/Centos7-ustc.repo https://mirrors.wlnmp.com/centos/Centos7-ustc-x86_64.repo网易 curl -o /etc/yum…

概率论原理精解【14】

文章目录 拓扑空间拓扑空间映射一、连续映射二、同胚映射三、开映射与闭映射四、其他映射五、映射空间 第一可数空间第一可数性公理第一可数空间的性质例子与反例 邻域基定义性质例子应用 参考文献 拓扑空间 拓扑空间映射 是一个相当宽泛且复杂的话题,因为拓扑空间…

HW蓝队某知名大厂面试题分享

🤟 基于入门网络安全/黑客打造的资源包无偿分享中: 👉黑客&网络安全入门&进阶学习资源包 应急响应流程 1)首先判断服务器资产、影响范围以及严重程度,确认有没有必要将服务器下线隔离,然后根据服务…