位置: 编程技术 - 正文

探讨JavaScript中的Rest参数和参数默认值(javascriptcsdn)

编辑:rootadmin

推荐整理分享探讨JavaScript中的Rest参数和参数默认值(javascriptcsdn),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:简要说明javascript的作用,javascript的理解,简述javascript,javascript的理解,javascript definitive guide,细说javascript,javascript definitive guide,简述javascript,内容如对您有帮助,希望把文章链接给更多的朋友!

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参数和参数默认值(javascriptcsdn)

与 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 这两个编译器都已经支持了参数默认值,所以你可以大胆使用。

结论

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

标签: javascriptcsdn

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

上一篇:JavaScript中的cacheStorage使用详解(JavaScript中的方法名不区分大小写)

下一篇:浅谈JavaScript的Polymer框架中的事件绑定(javascript的prompt)

  • 固定资产的确认条件包括
  • 公司组织旅游的费用要交个税
  • 金税盘维护费全额抵扣吗
  • 法人转钱入公户怎么做会计分录
  • 快递费运费物流费一样吗
  • 企业所得税税前扣除政策
  • 收到所得税退税会计怎么记账
  • 施工单位临时设施搭建费属于
  • 购买债券的利息会计分录
  • 暂估一直不来票,没有纳税调整怎么办
  • 公司收到红字发票怎么开
  • 什么情况下可要求厂商出品质保证书
  • 贴现利息支付方式
  • 递延收益金额怎么算
  • 人身意外伤害险保障范围
  • 高新技术企业如何融资
  • 企业哪些可以抵扣增值税
  • 未取得正式发票怎么整改
  • 个人所得税法规定可减征个税的情形有
  • 信用减值损失属于什么会计要素
  • 双倍余额递减法计提折旧公式
  • 长期借款优缺点分析
  • 受托加工物资产生的成本怎么做会计核算?
  • 财务报表包含哪些表
  • 基本社会保障性缴款包括什么
  • 4月发票能入1月吗
  • 增值税红字发票是什么意思
  • 一般纳税人进项税会计分录
  • 个人缴纳公积金有什么好处
  • 前期投资费用怎么做账
  • 手机cpu性能天梯图排行榜
  • 自己给笔记本更换硬盘
  • 拔罐的好处和坏处除湿
  • 收汇金额和出口金额差额大怎么办
  • 阿里前端做什么
  • 计提工资个人所得税账务处理
  • php查询语句怎么写
  • 所得税季报本月数是指
  • 购入多项固定资产
  • 发票带折扣怎么开
  • yolov3实现
  • discuz php版本
  • 购买承兑的收益会计分录
  • mongodb exception: $concat only supports strings, not NumberInt32解决办法
  • mongodb 入门
  • 递延收益为什么是递延所得税资产
  • 报销业务招待费是什么凭证
  • 利息收入为什么冲减财务费用
  • 折扣折让的会计分录
  • 企业年金是否要交个税
  • 消费税为什么是中央税还是地方税
  • 一般纳税人增值税申报操作流程
  • 账面价值大于计税基础是调增还是调减
  • 非公司人员差旅怎么报销
  • 城市生活垃圾处理费征收管理办法
  • 建筑行业工程施工当月可以不结转吗
  • 代扣税是不是社保
  • 物料损耗率计算例题及答案
  • 销售发奖金感谢说说
  • 关联交易定价方法包括
  • 在sql中执行一个创建数据表的脚本文件
  • 史上最全的mysql基础教程
  • 用心一也的一是什么词类活用
  • openbsd6.8
  • win8 系统设置
  • 桌面工具栏显示
  • win7打不开网页,可以重装系统吗
  • excel表格用windows7打不开
  • Linux使用scp命令进行文件远程的上传或下载
  • unity血条slider
  • FIF互动帮助手册系列-HTML手册 flash版
  • Android Fragment学习笔记(2) ----使用ListFragment显示列表(上)
  • shell获取字符串中的数字
  • python win
  • python sftp put
  • python多进程数量限制
  • python系统监控
  • 如何在税务系统缴纳医保
  • 痛点 堵点 难点 盲点
  • 福建地税网上办事大厅
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设