说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

【探秘ES6】系列专栏:剩余参数和默认参数

HTML文档下载 WORD文档下载 PDF文档下载
新一代JavaScript标准ES6正式发布。【探秘ES6】系列专栏将一一剖析ES6的诸多新特性,让Web开发者对此有清晰全面的了解。本文为系列的第五篇,带你了解ES6的剩余参数和默认参数。

ES6作为新一代JavaScript标准,正式与广大前端开发者见面。为了让大家对ES6的诸多新特性有更深入的了解,Mozilla Web开发者博客推出了《ES6 In Depth》系列文章。CSDN已获授权,将持续对该系列进行翻译,供大家学习借鉴。本文为该系列的第五篇。

本文讲述的是有关ES6剩余参数(Rest parameters)和默认参数(Defaults parameters)的使用。

剩余参数(Rest parameters)

当需要创建一个可变函数API时,该函数需要实现任意数目参数的输入。例如,String.prototype.concat方法可接受任意数目的字符串参数输入。而在ES6中,可利用剩余参数来转变实现思路。

以下将结合实例说明。containsAll是一个可变函数,用于检测字符串是否包含成分子串。例如,containsAll("banana", "b", "nan")返回true,containsAll("banana", "c", "nan")则返回false。

采用传统写法的代码如下:

function containsAll(haystack) {  for (var i = 1; i < arguments.length; i++) {    var needle = arguments[i];    if (haystack.indexOf(needle) === -1) {      return false;    }  }  return true;}

该方法的核心是利用了参数对象,以数组的方式向函数传入参数。它完全满足需求,但可读性差。其函数参数仅是唯一的haystack,因此很难一眼就看出到底包含了哪些参数。此外,在进行递归运算时,需要注意初始位置的索引号是1而不是0,因为arguments[0]对应的是haystack参数。最后假若需要在haystack的前或后添加别的参数,那么就不得不对循环进行更新。如果换用剩余参数,这些问题皆可一一迎刃而解。

使用剩余参数的代码如下:

function containsAll(haystack, ...needles) {  for (var needle of needles) {    if (haystack.indexOf(needle) === -1) {      return false;    }  }  return true;}

该方法实现了与传统写法一样的功能,区别是使用了特殊的语法...needles。那么对于containsAll("banana", "b", "nan"),其运算过程是怎么样的呢?首先haystack被第一个参数banana填充;位于needles前的符号...表明needles为剩余参数;以后的其它参数会被放入一个数组然后再分配给变量needles,本例中为["b", "nan"];之后的判断过程按常规执行。(注:这里使用了for-of 循环语法)

要提醒一点,只有位于最末的参数可被标记为剩余参数。位于剩余参数之前的参数与普通参数的处理方式是一样的。所有的额外参数都会被放入一个数组然后再分配给剩余参数。如果没有额外参数,剩余参数则为一个空数组;剩余参数不能被赋值为undefined。

默认参数(Default parameters)

很多时候,函数对传入的参数不一定全都进行处理,同时默认参数亦可以替代传入参数来进行使用。JavaScript一直以来在默认参数的处理上都显得比较笨拙;无值参数会被看作undefined。ES6里引入了特殊的默认参数处理方式。

请看下面的例子。

function animalSentence(animals2="tigers", animals3="bears") {    return `Lions and ${animals2} and ${animals3}! Oh my!`;}

对上述函数中每个参数来说,=之后的赋值表达式作用是为参数进行默认取值。因此, 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!”。

使用默认参数时,有几点需要留意。

  • 不同于Python,默认值表达式在函数调用的时候进行求值。也就是说,默认表达式可以使用已定义的参数值。例如把上述动物例子的函数改为较特别的方式:

function animalSentenceFancy(animals2="tigers",    animals3=(animals2 == "bears") ? "sealions" : "bears"){  return `Lions and ${animals2} and ${animals3}! Oh my!`;}

其结果是:animalSentenceFancy("bears") 返回的是 “Lions and bears and sealions. Oh my!”。

  • 取值undefined的作用等于是没有传入任何东西。因此,animalSentence(undefined, "unicorns") 返回的是 "Lions and tigers and unicorns! Oh my!"
  • 没有显式定义的默认参数等同于undefined,因此:

function myFunc(a=42, b) {...}

等同于

function myFunc(a=42, b=undefined) {...}

小结

ES6对剩余参数和默认参数使得JS函数的声明更具可读性和表达性,不妨动手试试。(译者:伍昆 责编:陈秋歌)

原文链接:ES6 In Depth: Rest parameters and defaults

本译文遵循Creative Commons Attribution Share-Alike License v3.0 

相关阅读:

【探秘ES6】系列专栏:ES6简介

【探秘ES6】系列专栏:迭代器和for-of循环

【探秘ES6】系列专栏:生成器

【探秘ES6】系列专栏:模版字符串

欢迎加入CSDN前端交流群:218126086,进行前端技术交流。  

Android xliff和字符串资源 android.hardware.USB类介绍 Android开发经验谈之应用间数据共享 android_asset这个URL详细使用方法 Android 2.3系统自带高清UI图标下载 设置ScrollView滚动条的颜色 WakeLock使用方法示例代码 Concurrent并发库常见问题总结 Android数据库SQLite性能优化技巧 Android开发之Java设计模式基础篇 Android开发之Java设计模式入门篇 Android开发之Java设计模式 Android开发之Java并发包集合类性能分析 Android开发之Java集合类性能分析 Android开发之Java虚拟机原理和内存分配 Android开发之Java基础系列教程目录 Android Theme主题样式开发注意点 Android 3.0开发用的平板推荐 android.resource://这个Uri你知道吗 ADT插件的10.0.1必须要Eclipse 3.5才能升级 Android线程优先级设置方法 Android Zip文件解压缩代码 Android开发之设置断点单步调试 Android裁剪图片最简单方法 Android平台待开发软件列表 Android开发知识-3月13日总结 Android平板开发注意点 Android 3.0自带的天气预报例子代码 Loader和Fragment使用示例代码 LoaderManager - Android 3.0新特性 帮助ADT改进DDMS中的Logcat中文乱码问题 CheckBox可以同时传递多个值吗? 请问有用过visual interdev的,如何让interdev也像dreamweaver可以在写程序的时候显示代码在哪行的啊.多谢了 请高手帮忙解决我的问题,在此表示谢谢! 有关datagrid 和webform 的问题 程序员的艳遇。。。。。。 验证字符串问题 IE问题!好烦人啊!那位高手能帮我解答! 怎么在建表时使用一个时间函数??就是指出加这条这条文件的时间?? 高手请进,多数据库链接的问题 如何成为一个程序员? 事务以及回滚的问题 有做完一个作业,放60分。 关于ASP调用VC编的DLL接收返回参数的问题 我提问,大家回答 有没有关于触发器的电子书籍? 怎么能够获得数据库的连接字串呀?? 大讨论:目前用什么工具、做什么开发最能赚钱?散分啦!感兴趣的程序员们快来!! 在IE中,打开某个页面,会连接到www.lop.com页面 关于islower(ch),isdigit(ch) 疑问 BQQ的服务器端有没有保存用户的聊天记录的? 如何获得程序方向键输入?多谢! 求助有关IFS-HOOK 高手请入!!急救!求msflexgrid 的打印源码????? 如何在list中显示文件夹 哪里可以看到Obejct类clone的实现方法? 系统的FOUND.00*文件夹里放的FILE000*是什么文件?可以删除吗?刚装系统时没有这些文件的阿 给分啊 今日郁闷之至……散分! 来来来,大伙们一起来衷心祝愿xxmm (晓箫)的老爸老妈顺利赴美参加晓箫的毕业典礼!! Dev-Cpp 使用 NetAPI32.lib 的问题 急寻严蔚敏,吴伟民版《数据结构习题集》c语言版的答案,请问哪有啊 高手们给我一个超级简单的HOOK API的例子好吗?求你们了。 错在哪里 好郁闷啊~ 谁有站内关键字模糊查询的代码?紧急求救、在线等待!!!! 字符串转化为数组的问题 讨论<<标准C++库大全>> 上次是哪位兄弟要的《新编API参考大全》CHM版呀?我找到了一个,还行。 欢迎大家访问我公司的网站! 请学c++builder 有份量的人推荐一本经典的教材(适合初学者) 欢迎大家访问我们公司的网址! 关于分页的问题 请帮我看看这个小程序 欢迎大家访问我公司的网站! 已知一个文件夹的路径,如何得到该文件夹中的文件的名字? 关于StreamReader的问题 欢迎大家访问我公司的网站! 有关编辑框的问题 I don't like the dictionary.My brother doesn't like the dictionary.(用neither…nor…连成一句话)Jack and Tom are classmates.(改为一般疑问句)I bought a watch for my dad.(对划线部分提问)全回答另加20分 what has been done with the old books?这个句子那个是主语、.怎么理解这句话啊?我觉得the old books应该在has和been 的中间,我的想法对吗? korean red ginseng and honey tea master blaster until the end这首歌、还有就是歌怎么就3min40s 歌词还有那么多句 谁有4分多的版本 不是被DJ改过的版本噢[00:00.91]Master Blaster - [00:01.48]Standing alone in the twilight[00:04.59]Somehow I feel you there What ____ with the clothes?A.has been done B.has done C.have done D.have been done We have some toma toes and dessert for dinner.翻译 求个master blaster until the end MP3下载 《昆虫记》之《孔雀蛾》读后感,急不要一整部《昆虫记》的读后感!只要《孔雀蛾》的读后感不是一整部《昆虫记》的读后感只针对《孔雀蛾》!明天交 Are you puttingon your Master Blaster - Until The End 求这首歌的MP3格式, 昆虫记的孔雀蛾一文的读后感600字!急!谢了! You are still holding your coat 对your coat 提问 跨文化交际教程 案例分析.III.CaseAnalysis (20 points)In India,a white Sari(纱丽服,一种女性服装) symbolizeswidowhood,while in the west,a white dress symbolizes purity.Answer the following questions:(1) What might theseIndian women t I didn't know which T-shirt was 什么,so I took themboth选择A nicer B well C worse D good ()are you putting on your coay?because i am cold 程序设计:猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒.(C#语言) 要求:1.要有联动性,老鼠和主人的行为是被动的.2.考虑可扩展性,猫的叫声可能引起其他联动效应. 口语交际诚信的好处 my sister often helps me怎样改成一般疑问句 由于系统故障导致安装comodo的目录被格了,于是我就想重装comodo time machine,但是安装时总提示重启系统,但是重启后还是装不了,清理过注册表也不行,yandekiss 你回答得有点技术含量好不好,就算 请写出你对于它们的感觉的形容词,也就是用什么词来形容它们:狗···猫···老鼠 口语交际 婉转拒绝的好处 找经典对联.优美好听的,几个好听的,语言优美.或者是朴实的.一定要让人一听就很舒服的.11ban 禁抄 time,the,on,shorts,new连词成句 i didn't know white t-shirt was(),so i took them bothA.nicer B.well C.worse D.good问下为什么还有这句话的意思 HE has an orange bag改为否定句 the,let,new,try,me,hat,my,on,son怎么连词成句 英语翻译其中 either own 和 use of 把“He has an orange.”改为陈述句和否定句.本人英语实在是不好.希望会英语的同学可以帮忙说一下. you,the,for,thank,new,shorts.怎么连词成句 昆虫记的主要内容400字 He has a black bag.(改为否定句) 一个物体的质量3000KG.分析下列情况下起重机钢丝绳对物体的拉力有多大.【G取10N/KG】1.物体以2M/S的速度匀速上升2.起重机悬吊着物体静止不动 34.Will you _____ it that this letter gets mailed today?A、see off B、see to C、look after D、look into选哪个为什么? Tom ofter does morning exercises.Tom ofter does morning exercises. 改成否定句和一般疑问句! ( )exercising,and you'll be healthier A.Keep B.To keep C.Keeping 希望可以说一下为什么 这次口语交际,请谈谈应该怎样上网才对我们小学生有好处,并把你想说的话写下来.快. food / drink / fruit / candy 这四个单词可数不可数问题1.个人理解 food / drink / fruit / candy 表示它们本身意思的时候都是不可数的,而表示它们各自的种类的时候都又是可数的名词了.可以这么理解吗? _____exercising,and you will be healthier A.keep B.To keep C.keeping D.kept为什么可以直接用keep,而不是to keep,或是keeping? 在口语交际教学中,为什么要遵循口语交际的特点和针对学生的实际选择教学内容? he has an orange 的复数是什么 英语:请用12个词填空.HURRY UP Word:an apple,an egg,a tomate,apples,tomatoes,eggs,sugar,milk,tea,chicken,cake,cheese.write:‘You must lose weight,'my doctor said to me,‘You mustn't eat( ).They're bad for the heart.'‘Can't I have( )for brea put to在这里的意思上下文如下:The authorities demand answers to questions that one would hesitate to put to one's intimate friends. drink到底可数还是不可数?We'd like something ( ) .括号中的填drink还是drinks what had been done had been done. time to go to the store意思 他们说,蔺相如怕廉颇像老鼠见了猫似的.再写一个有相同修辞手法的句子,快 Hurry up.Don't be什么 I'm a store to work. 他们说,蔺相如见了廉颇像老鼠见了猫似的,仿写句子 America has never been about what can be done for 有"您的"这个词语吗准确一点的哦那有“您们”这个词语吗? 蔺相如见了廉颇像老鼠见了猫似的仿照句子人们说,蔺相如见了廉颇像老鼠见了猫似的.______见了______像____________ “stupid”音标是怎么写的呀 昆虫记里描写独角仙、凤蝶的片段, 仿照 “蔺相如怕廉颇像老鼠见了猫似的”这个句子的写法写一句话 One never notices what has been done; one can only see what remains to be done.中文意思是什么? 甲、乙两人匀速按相反方向绕圆形跑道跑步,出发点在直径的两个端点.如果他们同时出发,并在乙跑完100米时第一次相遇,甲还差60米跑完一圈时第二次相遇.那么跑到长多少米? 1、蔺相如见了廉颇像老鼠见了猫似的,为什么要怕他呢!用了什么修辞手法2、大虫见掀他不着,吼一声,就像半天里起了个霹雳,震得那山冈也动了用了什么修辞手法3、日本到处有樱花,有的是几 下列句子各属于什么句式.1.别人送我一直小松鼠.( )2.这么远,见哪能射到呢?( )3.蘑菇都到哪儿去了呢?( )4.原来松鼠是我们家的小偷啊!( ) red ginseng 菲总统再次称菲政府不会就人质事件致歉韩亚空难最后一名留医伤者出院 曾经历民调称八成俄罗斯人认为俄腐败程度高美国“监控门”又酿新风波 德法意等国奥巴马与默克尔通电话亲口否认窃听其手中国接受联合国人权审查 美应先审视自“神医”胡万林再涉命案 腐而不朽屡屡“神医”胡万林出狱操旧业致一名大学生杭文一路超市门口救护车上一位姑娘产下杭州大伯清晨出门脑中风 急忙送医却找美容骗局有新招 银筷子夹虫子骗了两个崔永元赴美国调查“转基因”食品安全政伦敦唐人街罢市 抗议英警方“歧视性执奥巴马与默克尔通电话 否认情报机构窃辛格访华获“不寻常待遇” 两国握手世潘基文称叙化武核销进展顺利今年年底杭州到深圳每天开行6对动车(杭州市中级法院招聘速录员属事业编制2013全国中小城市百强县市公布 义三星向中国消费者道歉 7款问题机型延俄媒议论“中国反腐经验” 称中国采取马布里讽新疆抢走李根:有钱咋的?能买2015年英国陆军获奖照男神小贝和卷福的穿衣秘诀你造吗?!Pacific Controls推出陈光文:中日韩峰会能纾解三国冷战困局今天她生日 | 全智贤:颜值高 气场美国一架波音767客机滑行中引擎起火全面放开二胎,你准备好了吗勒夫率队向连败说“不”“伊斯兰国”40%成员为外籍:来自1英国军情六处在育儿网站招特工引发热烈想变得更健康?美国研究发现要减少吃糖韩朝劳动者足球赛平壤开幕 时隔八年再餐厅没开业网上发“差评”法“差评师”手机市场反应不佳 三星拟回购100亿伊朗将首次出席叙问题多边会谈如何当绅士?英杂志列出多项必备技能和俄罗斯开展实验:只有女人的太空旅程啥想学007邦德?先看你能不能负担起这巴西奥运会期间将对外国游客免签标题导航
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘