”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > JavaScript 中的展开和休息运算符

JavaScript 中的展开和休息运算符

发布于2024-11-01
浏览:620

Spread and Rest Operators in JavaScript

零食故事:
假设你有一篮子零食:

const snacks = ['apple', 'banana', 'chocolate'];

现在,您想与您的朋友分享这些零食。但你不是把整个篮子都给他们,而是把每件零食都拿出来,一一递给他们:

console.log(...snacks);  // Output: apple banana chocolate

...(摊开)操作符就像把零食从篮子里拿出来摊在桌子上。您的朋友现在可以单独领取它们!

另一方面,如果您的朋友带来了更多零食,您可以使用 ...(休息)运算符将它们全部收集到一个大篮子中:

function collectSnacks(...moreSnacks) {
  console.log(moreSnacks);
}

collectSnacks('cookie', 'chips', 'juice');  // Output: ['cookie', 'chips', 'juice']

在这里,...操作员将所有零食收集到一个新的篮子中。这就是剩余运算符的工作原理!

如果您是 JavaScript 新手,您可能遇到过两个特殊的语法元素:扩展运算符和剩余运算符。它们看起来都一样——三个点 (...)——但它们的使用方式不同。让我们用简单的例子来分解它们!

1.什么是价差运算符?
扩展运算符 (...) 用于将数组或对象扩展为单个元素。这就像将数组或对象解包到其组件中。

示例:扩展数组
假设您有一个数字数组,并且您希望将它们单独传递到一个函数中。

const numbers = [1, 2, 3];
console.log(...numbers);  // Output: 1 2 3

可以使用展开运算符将数组元素展开!

示例:组合数组
如果您有两个数组并想要合并它们,扩展运算符会让这件事变得简单:

const array1 = [1, 2, 3];
const array2 = [4, 5, 6];

const mergedArray = [...array1, ...array2];
console.log(mergedArray);  // Output: [1, 2, 3, 4, 5, 6]

这就像将 array1 和 array2 中的所有元素放入一个新数组中。

示例:复制对象
您还可以对对象使用展开运算符:

const user = { name: "Ahmed", age: 25 };
const updatedUser = { ...user, location: "Bengaluru" };

console.log(updatedUser);
// Output: { name: "Ahmed", age: 25, location: "Bengaluru" }

在这里,我们从用户对象复制了属性并添加了新的属性位置。

  1. 什么是 Rest 运算符? 剩余运算符与展开运算符相反。它不是扩展数组或对象,而是将多个元素收集到数组或对象中。

示例:带剩余参数的函数
想象一下您正在编写一个带有任意数量参数的函数:

function addNumbers(...nums) {
  return nums.reduce((sum, current) => sum   current, 0);
}

console.log(addNumbers(1, 2, 3, 4));  // Output: 10

在这种情况下,剩余运算符 ...nums 将所有参数收集到一个数组中,从而更容易使用多个值。

示例:Rest 解构
解构数组时还可以使用剩余运算符:

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

这里,first获取数组的第一个元素,rest将剩余元素收集到一个新数组中。

结论
展开和休息运算符是 JavaScript 中强大且多功能的工具。回顾一下:

  • Spread (...) 将数组或对象扩展为单个元素。
  • Rest (...) 将多个元素收集到一个数组或对象中。

希望您理解传播和休息这两个概念,这将使您的 JavaScript 代码更加简洁,更易于阅读!

编码愉快:)

版本声明 本文转载于:https://dev.to/amdzakir/spread-and-rest-operators-in-javascript-57j9?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 如何限制动态大小的父元素中元素的滚动范围?
    如何限制动态大小的父元素中元素的滚动范围?
    在交互式接口中实现垂直滚动元素的CSS高度限制问题:考虑一个布局,其中我们具有与用户垂直滚动一起移动的可滚动地图div,同时与固定的固定sidebar保持一致。但是,地图的滚动无限期扩展,超过了视口的高度,阻止用户访问页面页脚。$("#map").css({ marginT...
    编程 发布于2025-04-30
  • 哪种在JavaScript中声明多个变量的方法更可维护?
    哪种在JavaScript中声明多个变量的方法更可维护?
    在JavaScript中声明多个变量:探索两个方法在JavaScript中,开发人员经常遇到需要声明多个变量的需要。对此的两种常见方法是:在单独的行上声明每个变量: 当涉及性能时,这两种方法本质上都是等效的。但是,可维护性可能会有所不同。 第一个方法被认为更易于维护。每个声明都是其自己的语句,使其...
    编程 发布于2025-04-30
  • 如何在Java的全屏独家模式下处理用户输入?
    如何在Java的全屏独家模式下处理用户输入?
    Handling User Input in Full Screen Exclusive Mode in JavaIntroductionWhen running a Java application in full screen exclusive mode, the usual event ha...
    编程 发布于2025-04-30
  • 在网页开发中如何防止文本换行到多行?
    在网页开发中如何防止文本换行到多行?
    在Web开发中将文本限制为单行白空间属性一个简单但有效的解决方案是使用白空间属性。通过将白空间设置为Nowrap,您可以指示浏览器禁止文本跨多行破裂。 div { 白色空间:nowrap; } ,以防止包裹的文本超出指定的高度,结合白色空间:现在与溢出:隐藏。这种组合可以水平和垂直截断文本。重...
    编程 发布于2025-04-30
  • 解决Quicken一步更新不起作用问题,拨打+-9
    解决Quicken一步更新不起作用问题,拨打+-9
    需要Quicken的专家帮助?只需拨打1-888-848-2409以获得专业帮助即可。无论是故障排除错误,重置密码还是管理帐户设置,他们的知识渊博的支持团队都可以提供帮助。 Quicken的支持可从PST上午5点至下午5点,每周7天,确保帮助永远不会遥不可及。 https://www.devex...
    编程 发布于2025-04-30
  • HTML格式标签
    HTML格式标签
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    编程 发布于2025-04-30
  • 如何使用Python的请求和假用户代理绕过网站块?
    如何使用Python的请求和假用户代理绕过网站块?
    如何使用Python的请求模拟浏览器行为,以及伪造的用户代理提供了一个用户 - 代理标头一个有效方法是提供有效的用户式header,以提供有效的用户 - 设置,该标题可以通过browser和Acterner Systems the equestersystermery和操作系统。通过模仿像Chro...
    编程 发布于2025-04-30
  • 为什么尽管有效代码,为什么在PHP中捕获输入?
    为什么尽管有效代码,为什么在PHP中捕获输入?
    在php ;?>" method="post">The intention is to capture the input from the text box and display it when the submit button is clicked.但是,输出...
    编程 发布于2025-04-30
  • 如何同步迭代并从PHP中的两个等级阵列打印值?
    如何同步迭代并从PHP中的两个等级阵列打印值?
    同步的迭代和打印值来自相同大小的两个数组使用两个数组相等大小的selectbox时,一个包含country代码的数组,另一个包含乡村代码,另一个包含其相应名称的数组,可能会因不当提供了exply for for for the uncore for the forsion for for ytry...
    编程 发布于2025-04-30
  • 在程序退出之前,我需要在C ++中明确删除堆的堆分配吗?
    在程序退出之前,我需要在C ++中明确删除堆的堆分配吗?
    在C中的显式删除 在C中的动态内存分配时,开发人员通常会想知道是否需要手动调用“ delete”操作员在heap-exprogal exit exit上。本文深入研究了这个主题。 在C主函数中,使用了动态分配变量(HEAP内存)的指针。当应用程序退出时,此内存是否会自动发布?通常,是。但是,即使在这...
    编程 发布于2025-04-30
  • 如何使用Python有效地以相反顺序读取大型文件?
    如何使用Python有效地以相反顺序读取大型文件?
    在python 中,如果您使用一个大文件,并且需要从最后一行读取其内容,则在第一行到第一行,Python的内置功能可能不合适。这是解决此任务的有效解决方案:反向行读取器生成器 == ord('\ n'): 缓冲区=缓冲区[:-1] ...
    编程 发布于2025-04-30
  • 为什么不使用CSS`content'属性显示图像?
    为什么不使用CSS`content'属性显示图像?
    在Firefox extemers属性为某些图像很大,&& && && &&华倍华倍[华氏华倍华氏度]很少见,却是某些浏览属性很少,尤其是特定于Firefox的某些浏览器未能在使用内容属性引用时未能显示图像的情况。这可以在提供的CSS类中看到:。googlepic { 内容:url(&#...
    编程 发布于2025-04-30
  • 解决MySQL错误1153:数据包超出'max_allowed_packet'限制
    解决MySQL错误1153:数据包超出'max_allowed_packet'限制
    mysql错误1153:故障排除比“ max_allowed_pa​​cket” bytes 更大的数据包,用于面对阴谋mysql错误1153,同时导入数据capase doft a Database dust?让我们深入研究罪魁祸首并探索解决方案以纠正此问题。理解错误此错误表明在导入过程中接...
    编程 发布于2025-04-30
  • 为什么HTML无法打印页码及解决方案
    为什么HTML无法打印页码及解决方案
    无法在html页面上打印页码? @page规则在@Media内部和外部都无济于事。 HTML:Customization:@page { margin: 10%; @top-center { font-family: sans-serif; font-weight: bo...
    编程 发布于2025-04-30
  • Python高效去除文本中HTML标签方法
    Python高效去除文本中HTML标签方法
    在Python中剥离HTML标签,以获取原始的文本表示Achieving Text-Only Extraction with Python's MLStripperTo streamline the stripping process, the Python standard librar...
    编程 发布于2025-04-30

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3