学JS的心路历程-函式(六)其余参数及预设参数
今天我们要来介绍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的心路历程-函式(六)其余参数及预设参数的更多相关文章
- 学JS的心路历程 -函式(三)this
this是什么,取决于被呼叫的呼叫地点. 昨天有提到说,呼叫函式时候会传递隐含参数:arguments和this并讲解了arguments,今天我们就来探讨this吧! 什么是this 我们都会呼叫函 ...
- 学JS的心路历程-函式(二)arguments
参数(argument)与函式参数(parameter) 在讨论函式时,很多人都会把这两个搞混,我自己也不例外. 虽然讲错别人也听得懂,但是我们还是要搞清楚这两个的定义到底是什么! 参数是当我们呼叫函 ...
- 学JS的心路历程-函式(五)箭头函式
箭头函式arrow function 为了能够以更简短的方式建立函式,ES6变推出了箭头函式. 用说明的可能会不太懂,我们先拿之前的数组排序例子来看: var arr = [2,1,6,12,3,77 ...
- 学JS的心路历程-函式(四)apply、call
从上一篇可以知道,不同的函式呼叫会造成this的不同,但我们能不能在呼叫时候明确指定呢? 当然可以.会有这个想法是因为往往在执行某支函式时想要用回呼函式(mizumisushi),但发现this总是显 ...
- 学习JS的心路历程-函式(一)
前几天有间单提到该如何声明函式及在Hositing中会发生什么事,但是函式的奥妙不仅于此. 身为一个使用JS的工程师,我们一定要熟悉函式到比恋人还熟! 这几天将会把函式逐一扒开跟各位一起探讨其中的奥妙 ...
- 学JS的心路历程-JS支持面向对象?(一)
昨天在看Prototype看到JS支持面向对象,被前辈问到说那什么是面向对象?JS是面向对象语言吗? 便开始了一连串艰辛爬文过程,今天就来看一下两者有什么差异吧(rgwyjc)! 首先面向对象有三大特 ...
- 学JS的心路历程 - JS的Class
没错,你没有看错,虽然前面说JS是原型继承,但在ES6以后新增了class关键字!!! 不过底层实作仍然是以原型继承方式进行,所以基本上算是一个语法糖. 今天我们就来看一下如何使用吧! class 首 ...
- 学JS的心路历程-物件与原型(三)
昨天有说明到函式与建构式的原型,及指定建构式函式原型为另一个建构式函式,但其实这会造成复写constructor的问题. 复写constructor的问题(vmwork) 我们昨天有提到「建构式函式可 ...
- 学JS的心路历程 -物件与原型(二)
昨天有提到说Object.setPrototypeOf可以指定一个物件为另一个物件的原型,但有想过到底这个原型,也就是[[Prototype]]最终会到何处吗? 答案是Object.prototype ...
随机推荐
- FastDFS+Nginx+fastdfs-nginx-module集群搭建
一.实验环境说明 操作系统: Centos 6.6 x64 FastDFS 相关版本: fastdfs-5.05 fastdfs-nginx-module-v1.16 libfastcommon-v1 ...
- string类和stringBuilder类
字符串是C#中的一种重要数据类型,在项目开发中,离不开字符串操作.C#提供了string类实现字符串操作.于Convert类相似,string类中方法有静态方法和非静态方法.注意,在C#中String ...
- 各平台免费翻译API
google http://translate.google.cn/translate_a/single?client=gtx&dt=t&dj=1&ie=UTF-8&s ...
- 图算法之——dijkstra算法
一.算法特点 目标:找出加权图中前往X的最短路径 适用于:无环有向加权图,且各边的权值为正 二.算法思路 三.算法示例演示 如下图,请找出结点v1到其他各个结点的最短路径: 首先创建一个字典(散列表) ...
- oracle insert 返回ID
create or replace procedure getid(v_id out number)as v_sql varchar2(500); begin v_sql:='insert into ...
- redis的5种类型和所用命令
数据操作 redis是key-value的数据,所以每个数据都是一个键值对 键的类型是字符串 值的类型分为五种: 字符串string 哈希hash 列表list 集合set 有序集合zset 数据操作 ...
- 制作签名jar放置到前端资源目录下
给jar包打签名keytool -genkey -keystore myKeystore -alias jwstest查看签名信息jarsigner -keystore myKeystore data ...
- Windows2008R2安装Exchange 2010前必须要做的准备工作
由于WindowsServer2008R2已经包含了KB979099.KB982867.KB979744.KB983440.KB977020这些补丁的内容,所以无须另外下载安装. 详见https:// ...
- 《算法》第四章部分程序 part 18
▶ 书中第四章部分程序,包括在加上自己补充的代码,在有权有向图中寻找环,Bellman - Ford 算法求最短路径,套汇算法 ● 在有权有向图中寻找环 package package01; impo ...
- Python学习笔记_week1
一.编程语言的分类 编译型和解释型.静态语言和动态语言.强类型定义语言和弱类型定义语言,Python是一门动态解释型的强类型定义语言. Python的优缺点 Python解释器:CPython.IPy ...