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

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

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

一、复制数组

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

二、合并数组

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

三、数组去重

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

四、函数参数数量不固定

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

五、函数剩余参数

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

六、将类数组转为真数组

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

七、将数组转为参数序列

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

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

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

九、剩余元素组成的数组

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

十、字符串转为数组

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

十一、浅拷贝对象

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

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

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

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

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

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' }  

十四、合并对象

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 }  
// 注意:如果有同名属性,后面的属性会覆盖前面的属性

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

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

十六、注意事项

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

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

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

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

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

// 数组
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.mzph.cn/diannao/53947.shtml

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

相关文章

golang学习笔记16——golang部署与运维全攻略

推荐学习文档 golang应用级os框架,欢迎star基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总golang学习笔记01——基本数据类型golang学习笔记02——gin框架及基本原理golang学习笔记03——gin框架的核心数据结构golang学…

【C++基础概念理解——类的继承和嵌套】

基本概念 在 C 中,类的继承和嵌套类的定义是两种不同的概念。 class InitialSetupProcedure : public StateMachine //类的继承(符号是":")class InitialSetupProcedure::StateMachine //类的嵌套(符号是"::",意思是类StateMach…

深度学习和计算机视觉:实现图像分类

深度学习在计算机视觉领域的应用已经取得了革命性的进展。从图像分类到对象检测,再到图像分割和生成,深度学习模型在这些任务中都展现出了卓越的性能。本篇文章将介绍如何使用深度学习进行图像分类,这是计算机视觉中的一个基础任务。 计算机…

什么是幂等

什么是幂等? 幂等简单来说就是“重复做同一件事,结果还是一样的”。比如,你按电视遥控器的开关按钮,按一次电视开了,再按一次电视关了。这个操作不是幂等的,因为你每按一次,结果都不一样。 再…

KTM580030bit 绝对角度细分器支持最多 4096 对极与一键非线性自校准集成双 16bit 2M SAR ADC

KTM5800 是一款 30bit 绝对角度细分 4096 对极编码细分器,可以与磁电阻传感器( AM R/TMR )搭配,构成一个高速高精度的非接触磁性编码器模块。它具有以非常高的采样速率 读取传感器上的差分模拟正弦和余弦信号的能力&#xf…

pytest 生成allure测试报告

allure的安装 github地址 allure资产列表 windows下载.zip,解压并配置环境变量PATH;linux下载安装allure,可以使用windows下解压的.zip文件(通用),或者下载.rpm/.deb 文件进行安装并配置PATH;…

通信工程学习:什么是MRF多媒体资源功能、MRFC多媒体资源功能控制、MRFP多媒体资源功能处理

一、MRF多媒体资源功能 MRF(Multimedia Resource Function,多媒体资源功能)是3G/IMS网络中定义的提供多媒体资源功能的网络实体,它为3G/IMS网络的业务和承载提供媒体能力支持。MRF通过提供丰富的媒体处理功能,如播放声…

分块总结:时髦之裤

说白了就是南外分块题做的差不多了,来写一篇总结。 简要题意: 给一序列 a,初始时 a i i a_ii ai​i,有如下两个操作: 1.将[l,r]每个数改为x,该点增加贡献 ∣ a i − x ∣ |a_i-x| ∣ai​−x∣. 2.询问[l…

SQLite的入门级项目学习记录(二)

再补充一些基础知识: 并行操作的问题 1、可以多游标同时运行 SQLite,对于同一个连接sqlite3.connect(db_file),可以同时创建多个游标,每个游标都是独立的,可以执行各自的SQL命令序列。 import sqlite3# 创建数据库连…

FAT32文件系统详细分析 (格式化SD nandSD卡)

FAT32 文件系统详细分析 (格式化 SD nand/SD 卡) 目录 FAT32 文件系统详细分析 (格式化 SD nand/SD 卡)1. 前言2.格式化 SD nand/SD 卡3.FAT32 文件系统分析3.1 保留区分析3.1.1 BPB(BIOS Parameter Block) 及 BS 区分析3.1.2 FSInfo 结构扇区分析3.1.3 引导扇区剩余扇区3.1.4 …

vue在一个组件引用其他组件

在vue一个组件中引用另一个组件的步骤 必须在script中导入要引用的组件需要在export default的components引用导入的组件(这一步经常忘记)在template使用导入的组件<script><!-- 第一步,导入--> import Vue01 from "@/components/Vue01.vue";

828华为云征文 | Flexus X 实例服务器网络性能深度评测

引言 随着互联网应用的快速发展&#xff0c;网络带宽和性能对云服务器的表现至关重要。在不同的云服务平台上&#xff0c;即便配置相同的带宽&#xff0c;实际的网络表现也可能有所差异。因此&#xff0c;了解并测试服务器的网络性能变得尤为重要。本文将以华为云X实例服务器为…

【vue-media-upload】一个好用的上传图片的组件,注意事项

一、问题 media 的saved 数组中的图片使用的是location 相对路径&#xff0c;但是我的业务需要直接根据图片链接展示图片&#xff0c;而且用的也不是location 相关源代码 <div v-for"(image, index) in savedMedia" :key"index" class"mu-image-…

Hadoop林子雨安装

文章目录 hadoop安装教程注意事项&#xff1a; hadoop安装教程 链接: 安装教程 注意事项&#xff1a; 可以先安装ububtu增强功能&#xff0c;完成共享粘贴板和共享文件夹 ubuntu增强功能 2.这里就可以使用共享文件夹 或者在虚拟机浏览器&#xff0c;用 微信文件传输助手 传文…

uniapp vite3 require导入commonJS 的js文件方法

vite3 导入commonJS 方式导出 在Vite 3中&#xff0c;你可以通过配置vite.config.js来实现导入CommonJS&#xff08;CJS&#xff09;风格的模块。Vite 默认支持ES模块导入&#xff0c;但如果你需要导入CJS模块&#xff0c;可以使用特定的插件&#xff0c;比如originjs/vite-pl…

[网络]TCP/IP五层协议之应用层,传输层(1)

文章目录 一. 应用层二. 传输层端口号传输层的协议UDPTCPTCP报头TCP协议的核心机制 一. 应用层 应用层是和应用程序直接相关, 和程序猿打交道最多的一层 应用层协议, 里面描述的内容, 就是你写的程序, 通过网络具体按照啥样的形式来传输数据 不同的应用程序, 就可以用不同的应…

心觉:以终为始,帮你精准实现目标

Hi&#xff0c;我是心觉&#xff0c;与你一起玩转潜意识、脑波音乐和吸引力法则&#xff0c;轻松掌控自己的人生&#xff01; 挑战每日一省写作169/1000天 假设你的目标是 一年内赚到150万。我们可以通过“以终为始”和“以始为终”的结合来帮助你实现这个目标 以下是完整的…

Java使用Apache POI向Word文档中填充数据

Java使用Apache POI向Word文档中填充数据 向一个包含占位符的Word文档中填充数据&#xff0c;并保存为新的文档。 准备工作 环境搭建 在项目中添加Apache POI依赖。在pom.xml中添加如下依赖&#xff1a; <dependencies><dependency><groupId>org.apache.po…

C++:模板——详解函数模板与类模板

1. 模板的概念 C的模板&#xff08;Templates&#xff09;是泛型编程的基础&#xff0c;它允许编写与类型无关的代码&#xff0c;从而提高代码的复用性和灵活性。通过模板&#xff0c;你可以编写一种通用的函数或类&#xff0c;而不需要为每种特定的数据类型单独定义多个函数或…

写论文还在卡壳?教你用ChatGPT轻松搞定过渡段落!

AIPaperGPT&#xff0c;论文写作神器~ https://www.aipapergpt.com/ 在写论文的路上&#xff0c;最让人头疼的除了查重率飙升&#xff0c;估计就是文献综述了吧&#xff01; 想想看&#xff0c;文献一篇接着一篇&#xff0c;脑子都快炸了&#xff0c;还得想办法把它们连接得…