位置: 编程技术 - 正文

深入学习JavaScript中的Rest参数和参数默认值(深入学习习总书记系列讲话精神)

编辑:rootadmin

推荐整理分享深入学习JavaScript中的Rest参数和参数默认值(深入学习习总书记系列讲话精神),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:深入学习习总书记系列讲话精神,java deep learning,java深入理解,深入理解java nio,深入学习习总书记系列讲话精神,深入学习习总书记系列讲话精神,深入学习习总书记系列讲话精神,深入学习习总书记系列讲话精神,内容如对您有帮助,希望把文章链接给更多的朋友!

本文将讨论使 JavaScript 函数更有表现力的两个特性:Rest 参数和参数默认值。Rest 参数

通常,我们需要创建一个可变参数的函数,可变参数是指函数可以接受任意数量的参数。例如,String.prototype.concat 可以接受任何数量的字符串作为参数。使用 Rest 参数,ES6 为我们提供一种新的方式来创建可变参数的函数。

我们来实现一个示例函数 containsAll,用于检查一个字符串中是否包含某些子字符串。例如,containsAll("banana", "b", "nan") 将返回true,containsAll("banana", "c", "nan") 将返回 false。

下面是传统的实现方式:

该实现用到了 arguments 对象,该对象是一个类数组对象,包含函数被调用时的实参列表。这段代码正是我们想要的,但其可读性却不是最优的。函数只有一个形参 haystack,所以不可能一看就知道该函数需要多个参数,并且在遍历 arguments 时,需要特别注意遍历的开始索引为1 ,而不是常见的 0,因为 arguments[0] 就是函数定义时的形参 haystack。如果我们想在 haystack 参数之前或之后添加一些参数,我们不得不更新内部的循环。Rest 参数解决了这些问题,下面是 使用 Rest 参数的实现方式:

以上两个实现都满足了我们的需求,但后者包含一个特殊的 ...needles 语法。我们来看看调用containsAll("banana", "b", "nan") 时的细节,参数 haystack 和以往一样,将用函数的第一个实参填充,值为 "banana",needles 前面的省略号表示它是一个 Rest 参数,剩余的所有实参将被放入一个数组中,并将该数组赋给 needles 遍量。在这个调用中,needles 的值为 ["b", "nan"]。然后,就是正常的函数执行了。

只能将函数的最后一个函数作为 Rest 参数,在函数被调用时,Rest 参数之前的参数都将被正常填充,之外的参数将被放入一个数组中,并将该数组作为 Rest 参数的值,如果没有更多的参数,那么 Rest 参数的值为一个空数组 [],Rest 参数的值永远都不会是 undefined。参数的默认值

通常,调用一个函数时,不需要调用者传递所有可能的参数,那些没有传递的参数都需要一个合理的默认值。JavaScript 对那些没有传递的参数都有一个固定的默认值 undefined。在 ES6 中,引入了一种新方法来指定任意参数的默认值。

看下面例子:

在每个参数的 = 后面是一个表达式,指定了参数未传递时的默认值。所以,animalSentence() 返回 "Lions and tigers and bears! Oh my!", animalSentence("elephants") 返回"Lions and elephants and bears! Oh my!", animalSentence("elephants", "whales") 返回 "Lions and elephants and whales! Oh my!"。

深入学习JavaScript中的Rest参数和参数默认值(深入学习习总书记系列讲话精神)

参数默认值需要注意的几个细节:

与 Python 不一样的是,参数默认值的表达式是在函数调用时从左到右计算的,这意味着表达式可以使用前面已经被填充的参数。例如,我们可以将上面的函数变得更有趣一点:

那么,animalSentenceFancy("bears") 将返回 "Lions and bears and sealions. Oh my!"。

传递 undefined 等同于没有传递该参数。因此,animalSentence(undefined, "unicorns") 将返回 "Lions and tigers and unicorns! Oh my!"。 如果没有为一个参数指定默认值,那么该参数的默认值为 undefined,所以

等同于

抛弃 arguments

通过 Rest 参数和参数的默认值,我们可以完全抛弃 arguments 对象,使我们的代码可读性更高。此外,arguments 对象也加深了优化 JavaScript 的难题。

希望以上两个新特性可以完全取代 arguments。作为第一步,在使用 Rest 参数或参数的默认值时,请避免使用 arguments 对象,假如 arguments 对象还不会立即被移除,或者永远不会,那么也最好是避免在使用 Rest 参数或参数默认值时使用 arguments 对象。兼容性

Firefox 以上的版本已经支持这两个新特性。然而,除此之外,还没有其他任何浏览器支持。最近,V8 的实验环境添加了对 Rest 参数的支持,而参数默认值还有一个 issue,JSC 也对 Rest 参数和参数默认值提了一些 issue。

Babel 和 Traceur 这两个编译器都已经支持了参数默认值,所以你可以大胆使用。结论

尽管从技术层面上看,这两个新特性在并没有给函数引入新的行为,但它们可以使一些函数的声明更具表现力和可读性。

详解JavaScript ES6中的模板字符串 在ES6中引入了一种新的字符串字面量—模板字符串,除了使用反引号(`)表示,它们看上去和普通的字符串没有什么区别。在最简单的情况下,他们就是

详解JavaScript ES6中的Generator 今天讨论的新特性让我非常兴奋,因为这个特性是ES6中最神奇的特性。这里的神奇意味着什么呢?对于初学者来说,该特性与以往的JS完全不同,甚至有

深入了解JavaScript中的Symbol的使用方法 Symbol是什么?Symbols不是图标,也不是指在代码中可以使用小图片:也不是指代其他一些东西的语法。那么,Symbol到究竟是什么呢?七种数据类型JavaScript

标签: 深入学习习总书记系列讲话精神

本文链接地址:https://www.jiuchutong.com/biancheng/377568.html 转载请保留说明!

上一篇:详细解读JavaScript编程中的Promise使用(详细解读了)

下一篇:详解JavaScript ES6中的模板字符串

  • 跨年度的租金收入如何入账
  • 高新技术企业产品是什么意思
  • 银行预留印鉴是公章还是财务章
  • 以前年度损益对应的科目
  • 决算报表与账不一致怎么调账
  • 商家发票可以随便开金额吗
  • 转让生产指标的企业所得税
  • 公司员工的车外地的停车费怎么做分录
  • 外购商品用于促销能抵扣吗
  • 工程预付款未按时支付
  • 用银行存款上交上月税金会计分录
  • 受托加工费的成本都有什么
  • 进项税额转出是什么意思
  • 个体户开普票要交企业所得税吗
  • 汇算清缴调增的利润要进未分配吗
  • 事业单位转账支票管理
  • 财务费用在汇算清缴时填哪里科目
  • 房地产土地增值税加计扣除20%
  • 现金流量表的编制依据
  • 投资预算的编制方法
  • 办公用品收据可以入账吗
  • 利息支出的会计科目
  • 后裔王者荣耀台词大全
  • 车辆维修费可以抵扣进项吗
  • 通用文件系统
  • win10桌面2怎么使用
  • win11dev预览修复工具
  • wifan
  • 出口零退税率商品有哪些
  • 家庭承包发包方的权利和义务
  • 一列火车穿过一条隧道,已知火车长450米,隧道长750米
  • 公债的本质是什么
  • 数据持久化操作
  • 企业职工福利费包括哪些内容
  • 小规模未达起征点免税分录
  • 《web应用开发》是什么
  • opengl设置
  • 公路修路步骤
  • 文化事业建设费征收范围及计税依据
  • 已经认证了的专利怎么办
  • 公司向法人借款需要多久还清
  • 资产负债表的累计折旧
  • 开一般户需要基本户开户许可证吗
  • sql server自动生成行号
  • 分公司和总公司的税务核算
  • 公司购买汽车的会计分录
  • 收到银行承兑汇票怎么处理
  • 竣工结算的审核要点
  • 负数发票开错了是否可以作废?
  • 营改增是从什么时候开始实施的
  • 公司举行活动发言稿范文
  • 付款申请单如何生成凭证
  • 建筑公司脚手架租赁费会计分录
  • 房产税减免退税怎么操作
  • 更正申报所得税汇算清缴
  • 员工办理健康证费用由谁支付
  • 个人股权激励收入税率
  • SQL Server 2008 到底需要使用哪些端口?
  • 怎么验证触发器的执行
  • ubuntu右键菜单
  • dlg是什么意思中文
  • xp系统c盘到底哪些文件可以删除越详细越好谢谢
  • 怎么设置虚拟硬盘储存路径
  • win8系统怎么搜索文件
  • win7系统的分区类型怎么选
  • windows中复制文件的几种方法
  • win 7电脑音箱没有声音
  • win10非正常关机系统修复
  • cocos2d-x 3.3 final 适配安卓5.0机型小记
  • javascript怎么用
  • angular.js
  • perl pop push shift unshift实例介绍
  • [置顶]bilinovel
  • stick function
  • dos 输出重定向
  • shell 去空格 trim
  • 税务分局是什么意思
  • 广东省地税局网上办税
  • 石家庄经开区税务局
  • 非中山户籍学生可以自己买医保吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设