首页 > 其他分享 >JS 扩展运算符有哪些使用场景?

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

时间:2024-09-14 22:49:12浏览次数:14  
标签:... 场景 const log 输出 JS 运算符 numbers console

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

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

一、复制数组

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,证明对象类型属性是引用复制(浅拷贝)

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

标签:...,场景,const,log,输出,JS,运算符,numbers,console
From: https://blog.csdn.net/m0_37943716/article/details/142267464

相关文章

  • Arcgis api 4.x 专题图制作之分级色彩,采用自然间断法;(使用simple-statistics JS数学统
    1.效果2.实现 2.1分级色彩    分级色彩是在GIS制图中,通过不同颜色等级来表示数据量级差异的符号化方法,帮助用户直观识别和比较数据的大小。 2.2分级方法     在GIS中进行分级色彩制图时,可以选择不同的分级方法来表示数据的分布和变化,常见的分......
  • PyCharm修改背景颜色、修改字体大小+Python常用快捷键+Python常见的运算符
    文章目录PyCharm软件的使用1.修改背景颜色和字体大小1.1修改背景颜色1.2修改字体大小2.常用的快捷键3.常见的运算符3.1算术运算符3.2赋值运算符3.3比较运算符3.4逻辑运算符PyCharm软件的使用1.修改背景颜色和字体大小1.1修改背景颜色1.2修改字体大......
  • 高级java每日一道面试题-2024年9月08日-前端篇-JS的执行顺序是什么样的?
    如果有遗漏,评论区告诉我进行补充面试官:JS的执行顺序是什么样的?我回答:JavaScript的执行顺序是由其特殊的执行环境所决定的。JS的执行环境包括全局执行环境、函数执行环境和eval执行环境。在这些环境中,变量和函数声明会被提升(hoisting),而变量赋值和函数调用则按照......
  • 解码3D数字人及AIGC产品,如何赋能医美行业全场景业务增长
    9月13日,第六届“医美小小聚”暨医美信息与服务创新发展大会在热烈的氛围中拉开帷幕。此次盛会汇聚了医美行业的顶尖精英与前瞻者,他们围绕“聚焦营销,合规增长,融合共创”的主题,深入剖析了行业的新趋势、新机遇与新挑战。在这场前瞻观点与前沿技术的碰撞中,魔珐科技凭借领先的3D数......
  • 将项目里的moment替换为day.js
    day.js有和moment.js完全一样的API,但是它的体积却比moment要小的很多,moment打包后的体积有280kb左右,而day.js打包后只有6.3KB。它非常轻量化,因为它可以利用treeShaking如果你的项目里面使用的是moment.js,而你想要把它替换成day.js,很简单,直接使用一个webpack插件即可,而无需做任何......
  • 【工具】前端JavaScript代码在线执行器 方便通过网页 手机测试js代码
    【工具】前端JavaScript代码在线执行器方便通过网页手机测试js代码自动补全js代码格式化代码色彩打印日志清空日志待补充<!DOCTYPEhtml><htmllang="zh-CN"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,ini......
  • nlohmann/json安装与使用
    介绍nlohmann/json是一个用于处理JSON数据的C++库,提供了简单而强大的JSON解析和生成功能。以其简洁易用、功能强大而受到广泛欢迎。优点简单易用:使用现代C++特性,如自动类型推断和范围for循环,简化了JSON的创建、访问和操作。与标准库兼容:它与C++标准......
  • 【触想智能】工控一体机在船舶航运上应用的优势和应用场景分析
    随着船舶航运业的发展,工控一体机在船舶航运领域上的应用越来越广泛。工控一体机的功能和性能可以加强船舶航运领域的自动化和智能化水平。下面,触想智能小编针对工控一体机在船舶航运领域上应用的优势和应用场景进行简单分析,给大家借鉴参考。一、船舶管理工控一体机......
  • 从零开始,认识游戏设计师(5)体验发生于场景①
    平台当今游戏领域对游戏应该在什么平台上发售有过很激烈的讨论,有人坚持主机游戏天下无敌,有人嗤之以鼻,觉得快时代的节奏终归是移动端游戏的天下。但事实究竟是怎么样的呢?从早期的街机时代游戏,我们可以看到很多街机厅里的捕鱼达人,老虎机甚至街霸的火爆,到后来主机游戏的风靡,以至......
  • 【触想智能】工控一体机在船舶航运上应用的优势和应用场景分析
    随着船舶航运业的发展,工控一体机在船舶航运领域上的应用越来越广泛。工控一体机的功能和性能可以加强船舶航运领域的自动化和智能化水平。下面,触想智能小编针对工控一体机在船舶航运领域上应用的优势和应用场景进行简单分析,给大家借鉴参考。一、船舶管理工控......