ECMAScript6函数剩余参数(Rest Parameters)


Posted in Javascript onJune 12, 2015

我们知道JS函数内部有个arguments对象,可以拿到全部实参。现在ES6给我们带来了一个新的对象,可以拿到除开始参数外的参数,即剩余参数(废话好多 O(∩_∩)O~)。

这个新的对象和arguments不一样,它是程序员自定义的一个普通标识符,只是需要在前面加上三个点:...

function func(a, ...rest) {
 console.log(a)
 console.log(rest)
}
func(1)
func(1, 2, 3, 4)

注意func的第二个参数rest,前面有三个点。定义好后调用了两次,结果分别如下

ECMAScript6函数剩余参数(Rest Parameters)

可以看到第一次调用时,rest为一个空数组,第二次为[2, 3, 4]。

又比如,在前面定义2个参数

function func(a, b, ...rest) {
 console.log(a, b)
 console.log(rest)
}
func(1, 2)
func(1, 2, 3, 4)

输出结果如下

ECMAScript6函数剩余参数(Rest Parameters)

通过以上两个示例应该已经了解剩余参数的意义了吧。

剩余参数嘛,所以后面就不要再跟其它的参数了,不然会报错

function func(a, ...rest, b) {
 
}

这里在rest后面加了一个参数b,Firefox会报错

ECMAScript6函数剩余参数(Rest Parameters)

当您使用剩余参数后,函数的length属性会发生一些变化

function func(a, b, ...rest) {
}
func.length // 2

即length不包含rest,为2。

有同学会想,剩余参数前面是否可以一个参数都没有呢? 答案是肯定的

function func(...rest) {
 console.log(rest)
}
func(1) // [1]
func(1, 2, 3, 4) // [1,2,3,4]

这里的rest实际和arguments功能差不多,有同学想这不就替代了arguments吗? ECMAScript就是这个打算,在被废弃的ES4里就已经有Rest Parameters(熟悉AS3的同学应该了解),ES4被废弃后,Rest Parameters被保留到了ES6。

请注意,rest不能和arguments一起使用,会报错

function func(...rest) {
 console.log(rest)
 console.log(arguments)
}

Firefox控制台如下

ECMAScript6函数剩余参数(Rest Parameters)

arguments和剩余参数的区别

arguments是一个伪数组(Array-like)
剩余参数是一个真正数组(Array),具有Array.prototype上的所有方法
arguments上有callee,callee上有caller

function func(a, ...rest) {
  console.log(rest instanceof Array)
}
func(1, 2) // true

最后我们以一个剩余参数实际应用作为结束

/*
 * 任意个数相加
 *
 * **示例**
 * sum(1)
 * sum(1, 2)
 * sum(1, 2, 3)
 */
function sum(first, ...rest) {
  var result = first
  var i = 0
  var len = rest.length
  while (i < len) {
    result += rest[i]
    i++
  }
  return result
}

以上所述就是本文的全部内容了,希望大家能喜欢。

Javascript 相关文章推荐
【消息提示组件】,兼容IE6/7&amp;&amp;FF2
Sep 04 Javascript
jQuery 拖动层(在可视区域范围内)
May 24 Javascript
script不刷新页面的联动前后代码
Sep 18 Javascript
jquery查找tr td 示例模拟
May 08 Javascript
JavaScript按值删除数组元素的方法
Apr 24 Javascript
javascript编写贪吃蛇游戏
Jul 07 Javascript
详解angularJs中自定义directive的数据交互
Jan 13 Javascript
node.js中debug模块的简单介绍与使用
Apr 25 Javascript
浅谈Vue的加载顺序探讨
Oct 25 Javascript
async/await地狱该如何避免详解
May 10 Javascript
JavaScript常用数组操作方法,包含ES6方法
May 10 Javascript
使用js获取身份证年龄的示例代码
Dec 11 Javascript
ECMAScript6函数默认参数
Jun 12 #Javascript
在JavaScript中操作时间之setYear()方法的使用
Jun 12 #Javascript
简介JavaScript中setUTCSeconds()方法的使用
Jun 12 #Javascript
JS中产生标识符方式的演变
Jun 12 #Javascript
JS中处理时间之setUTCMinutes()方法的使用
Jun 12 #Javascript
JavaScript中setUTCMilliseconds()方法的使用详解
Jun 12 #Javascript
JavaScript中setUTCFullYear()方法的使用简介
Jun 12 #Javascript
You might like
php eval函数用法总结
2012/10/31 PHP
使用php测试硬盘写入速度示例
2014/01/27 PHP
php导出CSV抽象类实例
2014/09/24 PHP
php检测url是否存在的方法
2015/04/14 PHP
关于jquery append() html时的小问题的解决方法
2010/12/16 Javascript
JavaScript事件处理的方式(三种)
2016/04/26 Javascript
详谈JS中实现种子随机数及作用
2016/07/19 Javascript
纯JS单页面赛车游戏制作代码分享
2017/03/03 Javascript
node.js程序作为服务并在windows下开机自启动(用forever)
2017/03/29 Javascript
通俗解释JavaScript正则表达式快速记忆
2017/08/23 Javascript
浅析Vue 防抖与节流的使用
2019/11/14 Javascript
js表达式与运算符简单操作示例
2020/02/15 Javascript
基于vue+element实现全局loading过程详解
2020/07/10 Javascript
[48:27]EG vs Liquid 2018国际邀请赛淘汰赛BO3 第二场 8.25
2018/08/29 DOTA
python编程使用selenium模拟登陆淘宝实例代码
2018/01/25 Python
python删除某个字符
2018/03/19 Python
Python中的Numpy矩阵操作
2018/08/12 Python
Python线程池模块ThreadPoolExecutor用法分析
2018/12/28 Python
pyqt5 删除layout中的所有widget方法
2019/06/25 Python
浅谈python print(xx, flush = True) 全网最清晰的解释
2020/02/21 Python
keras自定义回调函数查看训练的loss和accuracy方式
2020/05/23 Python
python实现简单的tcp 文件下载
2020/09/16 Python
Sneaker Studio波兰:购买运动鞋
2018/04/28 全球购物
销售员工作检讨书(推荐篇)
2014/10/18 职场文书
2015年师德师风自我评价范文
2015/03/05 职场文书
复兴之路观后感3000字
2015/06/02 职场文书
刑事法律意见书
2015/06/04 职场文书
开天辟地观后感
2015/06/09 职场文书
2016年精神文明建设先进个人事迹材料
2016/02/29 职场文书
幼儿园2016年感恩节活动总结
2016/04/01 职场文书
《天净沙·秋思》教学反思三篇
2019/11/02 职场文书
Pytorch distributed 多卡并行载入模型操作
2021/06/05 Python
CSS 伪元素::marker详解
2021/06/26 HTML / CSS
使用Spring处理x-www-form-urlencoded方式
2021/11/02 Java/Android
Windows server 2012 R2 安装IIS服务器
2022/04/29 Servers
Vue操作Storage本地化存储
2022/04/29 Vue.js