深入探索JavaScript中实用而高级的Rest参数和Spread语法

news2024/11/15 22:47:38

🧑‍🎓 个人主页:《爱蹦跶的大A阿》

🔥当前正在更新专栏:《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》

​ 

✨ 前言

        函数是JavaScript这个语言的核心,而如何处理函数的参数是函数编程中非常关键的问题。传统的JavaScript在处理不定参数以及数组的时候需要些枯燥乏味的代码。好在ES6给了我们两个光明的武器:Rest参数和Spread语法。 hoje我们一起来看看这两种语法糖独特的魅力所在。

✨ 正文

一、Rest参数

  • Rest参数语法

Rest参数语法允许我们将一个不定数量的参数表示为一个数组:

function(...args) {
  // ...
}
  • Rest参数的使用场景
  1. 将多个参数合并成数组
  2. 获取函数的多余参数
  3. 实现多个参数与数组的转换
  • Rest参数的使用示例
    // 将参数合并成数组
    function concat(...args) {
      return args;
    }
    
    concat(1, 2, 3); // [1, 2, 3]
    
    // 获取函数多余参数
    function max(first, ...nums) {
      let maxValue = first;
      for (let n of nums) {
        if (n > maxValue) {
          maxValue = n;
        }
      }
      return maxValue;
    }
    
    // 实现参数和数组转换
    function f(a, b, ...args) {
      // ...
    }
    
    const args = [1, 2, 3];
    f(...args);

详解: 

  • Rest参数与arguments对象的区别
  1. rest参数将多余的参数放入数组中,而arguments对象是一个类数组对象
  2. rest参数需要用(...args)的语法声明,而arguments对象不需要声明
  3. rest参数显式包含了某个函数的所有参数,arguments对象包含了所有参数但不会在函数签名中反映出来
  • rest参数的长度

rest参数的长度由实参决定,它取决于函数调用时实际传入的参数个数。

function foo(...args) {
  console.log(args.length);
}

foo(1); // 1
foo(1, 2, 3); // 3

二、Spread语法

  • Spread语法概念

Spread语法可以将数组、对象在语法层面展开成多个参数或者元素。

  • Spread语法的使用场景
  1. 将数组转为参数序列
  2. 复制数组
  3. 合并数组
  • Spread语法的使用示例
    // 将数组转为参数序列
    const arr = [1, 2, 3];
    f(...arr);
    
    // 复制数组
    const arr1 = [...arr]; 
    
    // 合并数组
    const arr2 = [...arr1, ...arr];

 详解:

  • 数组展开并不会复制数组

使用Spread语法展开数组时,它产生的是对原数组的引用,而不是数组的副本。

let arr1 = [1, 2];
let arr2 = [...arr1];

arr2.push(3);
console.log(arr1); // [1, 2, 3]

 

  • 对象展开进行浅复制

使用扩展运算符复制对象时,它只会进行浅复制。如果对象包含嵌套对象,则只会复制对象的引用。

let obj1 = { foo: { bar: 1 } };
let obj2 = { ...obj1 }; 

obj2.foo.bar = 2;
console.log(obj1.foo.bar); // 2

✨ 结语

        通过本文的介绍,我们可以看到Rest参数和Spread语法在处理不定参数以及数组操作中具有非常高的表达力。

        Rest参数为我们处理函数的不定参数提供了极大的便利,我们可以非常灵活方便地将参数合并成数组。Spread语法进行数组展开,使我们可以轻松实现数组的复制和合并。

        学习并掌握好这两种语法,可以让我们的代码质量得到极大提升。它们是ES6带来的重要的语法糖,值得我们深入探索应用。

        当然,关于JavaScript的技巧还有很多,我们要保持好奇和探索的心,不断学习,成为优秀的JavaScript开发者!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1376942.html

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

相关文章

【卡方检验(Chi-Squared Test)的原理简介】

文章目录 卡方检验(Chi-Squared Test)的原理简介1. 卡方检验的流程借助scipy进行卡方检验3 连续变量的卡方检验4 借助sklearn进行卡方检验特征筛选 卡方检验(Chi-Squared Test)的原理简介 在一般情况下,卡方检验是针对…

Android Retrofit使用详情

一、 Retrofit是什么 Retrofit是Android用来接口请求的网络框架,内部是基于OkHttp实现的,retrofit负责接口请求的封装,retrofit可以直接将接口数据解析为Bean类、List集合等,直接简化了中间繁琐的数据解析过程 二、 Retrofit的简单…

kylin3集群问题和思考(单机转集群)

目录 单机改集群注意事项 问题 思考 建议 单机改集群注意事项 之前是使用的单机版,但后面查询压力过大,一个方案是改成集群。 由于是同一个集群的,元数据没有变化,所以,直接将原本的kylin使用scp的方式发送到其他节…

数据结构04附录01:字符串大写转小写[C++]

图源:文心一言 上机题目练习整理~🥝🥝 本篇作为字符串的代码补充,提供了3种(差别并不大)解法以及函数的详细解释,供小伙伴们参考~🥝🥝 前文:🌸…

基于SSM的汽车客运订票系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

漏油控制器有用吗?漏油监测器多少钱一个?

漏油控制器也可以被称作漏油监测器、漏油传感器,是漏油检测系统里的一部分,一般是和漏油检测绳组合在一起使用,用来检测油罐、输油管道、油类化工厂等场合是否有油料泄露。很多人刚开始可能会觉得难以置信,这么一个小东西就可以检…

Sqoop入门指南:安装和配置

Sqoop是一个强大的工具,用于在Hadoop和关系型数据库之间高效传输数据。在本篇文章中,将深入探讨如何安装和配置Sqoop,以及提供详细的示例代码。 安装Java和Hadoop 在开始安装Sqoop之前,首先确保已经成功安装了Java和Hadoop。Sqo…

魔众文库新版本:自动化功能让文库管理更轻松!

VIP界面升级,文档文本自动解析、虚拟数量升级,小程序自适应 [新功能] Values 组件新增 countFixed 属性,固定显示数量 [新功能] 后台文库管理分页调整为 10,100,,100 [新功能] 后台文库管理增加虚拟数量批量修改功能…

Golang基础入门及Gin入门教程(2024完整版)

Golang是Google公司2009年11月正式对外公开的一门编程语言,它不仅拥有静态编译语言的安全和高性能,而 且又达到了动态语言开发速度和易维护性。有人形容Go语言:Go C Python , 说明Go语言既有C语言程序的运行速度,又能达到Python…

抖店开通后下一步做什么?最新教程如下,手把手教你设置店铺功能

我是王路飞。 上篇文章给你们说了下2024年最新的抖店开通、入驻流程,还没看到的可以去看下。 既然店铺已经开通了,那接下来自然就是运营店铺了。 很多新手小白也是开店很积极,但真正开始运营的时候就抓瞎了,不知道店铺开通后下…

【深入挖掘Java技术】「源码原理体系」盲点问题解析之HashMap工作原理全揭秘(下)

盲点问题解析之HashMap工作原理全揭秘 承接上文创建HashMap对象参考容量(capacity)Hashmap内部有一个机制扩容阈值(threshold)负载因子(loadFactor) HashMap存储元素的过程HashMap的put方法JDK8的扩容机制N…

使用curl命令在Linux上进行HTTP请求

在Linux系统中,curl是一个非常强大的命令行工具,用于发送各种类型的HTTP请求。通过简单的命令,你可以发送GET、POST、PUT、DELETE等请求,以及设置请求头、处理响应等。以下是一些使用curl进行HTTP请求的常见用法和示例。 1. 发送…

(十)IIC总线-PCF8591-ADC/DAC

文章目录 IIC总线篇起始,终止信号应答信号发送,读取数据IIC通讯规则 PCF8591-ADC-DAC篇特性一般说明地址Control byte(控制字)简单了解一下DAC电阻分隔链应用为王DAC的应用ADC的应用ADC采集特点ADC读模式 ADC现象演示DAC现象演示 …

八、Stm32学习-USART-中断与接收数据包

1.通信接口 全双工就是数据的收和发可以同时进行;半双工就是数据的收和发不能同时进行。 异步时钟是设备双方需要约定对应的波特率;同步时钟是设备双方有一根时钟线,发送或接收数据是根据这根时钟线来的。 单端电平是需要共GND;…

uniapp 打包成 apk(原生APP-云打包)免费

修改APP配置 根据需求,修改 manifest.json 配置,常见的修改有: 应用名称,应用版本名称,应用版本号 升级版本时,应用版本名称和应用版本号必须高于上一版的值 应用图标 点浏览选择png格式的图片后&#x…

【VPN技术】简述几种常见VPN技术并比较其异同点

VPN技术是一种可以在公共网络上建立加密通道的技术,通过这种技术可以使远程用户访问公司内部网络资源时,实现安全的连接和数据传输。 下面以四种常见的VPN技术,分别介绍各自的特点和适用场景,然后进行异同点的比较。 PPTP&#x…

微信私域,如何实现高效回复客户消息?

随着微信用户数量的增加,人们的需求也越来越多。其中有一项就是全天候及时回复消息,不让好友等待。当企业拥有多个微信号进行私域流量管理时,如何做到及时回复客户消息呢? 下面给大家分享高效回复客户消息的秘诀,帮助提…

highlight.js 实现搜索关键词高亮效果 ,显示匹配数量及切换显示功能

先看效果&#xff1a; 更新&#xff1a;增加切换显示 折腾了老半天&#xff0c;记录一下 注意事项都写注释了 代码&#xff1a; <template><div class"absolute-lt wh-full overflow-hidden p-10"><div style"width: 200px"><el-…

研究了Web版Photoshop,提升自己=提升价值

Adobe 发布了Web版 Photoshop&#x1f517;&#xff0c;它是使用 WebAssembly、web components、P3 颜色等 Web 技术构建的。本文就来研究一下网页版 Photoshop 上有趣又有用的 CSS 知识&#xff01; Photoshop 旧 Logo 首先&#xff0c;在浏览器控制台中使用了 Photoshop 的 …

【数字人】9、DiffTalk | 使用扩散模型基于 audio-driven+对应人物视频 合成说话头(CVPR2023)

论文&#xff1a;DiffTalk: Crafting Diffusion Models for Generalized Audio-Driven Portraits Animation 代码&#xff1a;https://sstzal.github.io/DiffTalk/ 出处&#xff1a;CVPR2023 特点&#xff1a;需要音频对应人物的视频来合成新的说话头视频&#xff0c;嘴部抖…