今天我们要来介绍ES6新增的其余参数及预设参数!

其余参数rest parameter

…numbers可以让我们表示不确定数量的参数,并将其视为一个数组:

function getVal(…numbers){

console.log(numbers);

}

getVal(1,24,5,6,7);//[[1,24,5,6,7]]

function getVal(first,…numbers){

console.log(first,numbers);

}

getVal(1,24,5,6,7);//1 [24,5,6,7]

这边要注意到的是,只能在函式最后一个参数作使用,否则会报错误:

function getVal(…numbers,last){

console.log(numbers);

}

//SyntaxError: Rest parameter must be last formal parameter

可能会有人认为我用之前的arguments就好了,为什么要多学一个其余参数的用法?这边我们来列出两者的差异:

arguments是类数组,无法使用一般数组的方法像map、sort,

其余参数为数组则可以使用

arguments物件自身有额外的功能,例如callee属性(radiographersreporting)。

所以我们今天要写一个由大到小排列的函式,用其余参数就会轻松许多:

function mutilMax(…numbers){

var sorted = numbers.sort((a,b)=>b-a);

return sorted;

}

mutilMax(1,24,5,6,7);// [24,7,6,5,1]

如果用arguments需要先把它转成数组才能使用:

function mutilMax(){

var arr = Array.from(arguments);

var sorted = arr.sort((a,b)=>b-a);

return sorted;

}

mutilMax(1,24,5,6,7);

预设参数default parameter

有时候我们会希望函式传进来的参数是固定值,像是:

function personCheck(name,check){

return name+“”+check;

}

personCheck(“Ann”,“checked”);//“Ann checked”

personCheck(“Lia”,“checked”);//“Lia checked”

personCheck(“Una”,“checked”);//“Una checked”

这时候我们会作修改:

function personCheck(name,check){

check = typeof(check)===“undefined”?“checked“:check;

return name+“”+checked;

}

personCheck(“Ann”);//“Ann checked”

personCheck(“Una”);//“Una checked”

personCheck(“Jason”,“not here”);//“Jason not here”

这边看到的typeof(checked)===“undefined”?“checked“:checked代表如果今天没有传入参数checked会是undefined则预设为”checked“,否则回传传入参数。

但是这样还是很麻烦,能不能在精简写法呢?

幸好ES6提供了预设参数功能:

function personCheck(name,check =“checked”){

return name+“”+check;

}

personCheck(“Ann”);//“Ann checked”

personCheck(“Una”);//“Una checked”

personCheck(“Jason”,“not here”);//“Jason not here”

如果指定了一个值,预设值就会被覆盖。是不是方便很多了呢!

预设参数除了可以指派数字和字串,也能指派物件、数组设置函式:

function personCheck(name,check =“checked”,message = name+“”+check){

return message;

}

personCheck(“Una”);//“Una checked”

personCheck(“Jason”,“not here”);//“Jason not here”

但老实说,这程序的可读性实在不怎么好,所以要斟酌使用喔!

来源:(http://www.pamaj-appareL.com

学JS的心路历程-函式(六)其余参数及预设参数的更多相关文章

  1. 学JS的心路历程 -函式(三)this

    this是什么,取决于被呼叫的呼叫地点. 昨天有提到说,呼叫函式时候会传递隐含参数:arguments和this并讲解了arguments,今天我们就来探讨this吧! 什么是this 我们都会呼叫函 ...

  2. 学JS的心路历程-函式(二)arguments

    参数(argument)与函式参数(parameter) 在讨论函式时,很多人都会把这两个搞混,我自己也不例外. 虽然讲错别人也听得懂,但是我们还是要搞清楚这两个的定义到底是什么! 参数是当我们呼叫函 ...

  3. 学JS的心路历程-函式(五)箭头函式

    箭头函式arrow function 为了能够以更简短的方式建立函式,ES6变推出了箭头函式. 用说明的可能会不太懂,我们先拿之前的数组排序例子来看: var arr = [2,1,6,12,3,77 ...

  4. 学JS的心路历程-函式(四)apply、call

    从上一篇可以知道,不同的函式呼叫会造成this的不同,但我们能不能在呼叫时候明确指定呢? 当然可以.会有这个想法是因为往往在执行某支函式时想要用回呼函式(mizumisushi),但发现this总是显 ...

  5. 学习JS的心路历程-函式(一)

    前几天有间单提到该如何声明函式及在Hositing中会发生什么事,但是函式的奥妙不仅于此. 身为一个使用JS的工程师,我们一定要熟悉函式到比恋人还熟! 这几天将会把函式逐一扒开跟各位一起探讨其中的奥妙 ...

  6. 学JS的心路历程-JS支持面向对象?(一)

    昨天在看Prototype看到JS支持面向对象,被前辈问到说那什么是面向对象?JS是面向对象语言吗? 便开始了一连串艰辛爬文过程,今天就来看一下两者有什么差异吧(rgwyjc)! 首先面向对象有三大特 ...

  7. 学JS的心路历程 - JS的Class

    没错,你没有看错,虽然前面说JS是原型继承,但在ES6以后新增了class关键字!!! 不过底层实作仍然是以原型继承方式进行,所以基本上算是一个语法糖. 今天我们就来看一下如何使用吧! class 首 ...

  8. 学JS的心路历程-物件与原型(三)

    昨天有说明到函式与建构式的原型,及指定建构式函式原型为另一个建构式函式,但其实这会造成复写constructor的问题. 复写constructor的问题(vmwork) 我们昨天有提到「建构式函式可 ...

  9. 学JS的心路历程 -物件与原型(二)

    昨天有提到说Object.setPrototypeOf可以指定一个物件为另一个物件的原型,但有想过到底这个原型,也就是[[Prototype]]最终会到何处吗? 答案是Object.prototype ...

随机推荐

  1. 如何用两块硬盘做磁盘阵列的教程Raid 1

    如今,市面上的大部分服务器都自带有阵列卡.只要有两块以上硬盘,我们就可以利用服务器自带的阵列卡做磁盘阵列.Raid 1 为例.Raid 1 是磁盘阵列的其中一个系列,将两块硬盘构成磁盘阵列,可以保证数 ...

  2. Python的字典类型

    Python的字典类型为dict,用{}来表示,字典存放键值对数据,每个键值对用:号分隔,每个键值对之间用,号分隔,其基本格式如下: d = {key1 : value1, key2 : value2 ...

  3. rsyncd

    rsync是一个快速.通用的文件复制工具.支持两种工作模式:基于shell的传输.基于服务的传输.1.配置文件 rsyncd.conf文件由模块及其参数构成.模块由方括号包裹模块名称,直到下一个模块结 ...

  4. JS 变量是否有值的判断

    var node; …… 判断 node 是否有值,是否为 undefine,是否 null,直接使用两个!!,否定之否定: if (!!node){ .... }else{ .... } 这个条件判 ...

  5. ios判断当前设备类型

    代码如下: + (NSString*) deviceString { // 需要#import "sys/utsname.h" struct utsname systemInfo; ...

  6. UVA-10020-贪心

    题意:给你一些数轴上的线段,要求寻找出某些线段能够完全覆盖[0,M],并且取的线段数目最小. 解题思路: 贪心思路, 1.每个线段都有一个L和R,代表它的起点和终点,对于所有R <= 0 ,   ...

  7. Java Base64 加密/解密

    Base64常用来表示字串加密过后的内容,使用Java 程式语言来实作Base64的编码与解码功能 1.在Java上做Base64的编码与解码,会使用到JDK里sun.misc套件下的BASE64En ...

  8. 46.纯 CSS 创作一个在容器中反弹的小球

    原文地址:https://segmentfault.com/a/1190000015221260 练习地址:https://scrimba.com/c/c3GEWmTb 感想: 原来animation ...

  9. 39.纯 CSS 创作一个表达怀念童年心情的条纹彩虹心特效

    原文地址:https://segmentfault.com/a/1190000015126240 HTML code: <div class="heart"> < ...

  10. xml文件中的${}

    看到了${}这样的表达式,脑海里面第一印象是不是我们jsp中的EL表达式?! 哈哈... 不过,这个真不是EL表达式,Spring提供了自己的EL表达式,可是它的格式是#{} so.... ${key ...