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 相关文章推荐
20款非常优秀的 jQuery 工具提示插件 推荐
Jul 15 Javascript
JS删除数组元素的函数介绍
Mar 27 Javascript
javascript函数定义的几种区别小结
Jan 06 Javascript
alert出数组中的随即值代码
Sep 25 Javascript
AngularJS基础 ng-selected 指令简单示例
Aug 03 Javascript
jQuery点击弹出层弹出模态框点击模态框消失代码分享
Jan 21 Javascript
js判断手机系统是android还是ios
Mar 07 Javascript
快速解决Vue项目在IE浏览器中显示空白的问题
Sep 04 Javascript
vue实现购物车抛物线小球动画效果的方法详解
Feb 13 Javascript
JavaScript页面倒计时功能完整示例
May 15 Javascript
JavaScript跳出循环的三种方法(break, return, continue)
Jul 30 Javascript
JavaScript的一些小技巧分享
Jan 06 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手册及PHP编程标准
2006/12/17 PHP
PHP抓取、分析国内视频网站的视频信息工具类
2014/04/02 PHP
thinkphp3.2嵌入百度编辑器ueditor的实例代码
2017/07/13 PHP
DOM2非标准但却支持很好的几个属性小结
2012/01/21 Javascript
jQuery侧边栏随窗口滚动实现方法
2013/03/04 Javascript
Jquery实现带动画效果的经典二级导航菜单
2013/03/22 Javascript
window.onload追加函数使用示例
2014/03/03 Javascript
基于JQuery实现图片上传预览与删除操作
2016/05/24 Javascript
Mongoose学习全面理解(推荐)
2017/01/21 Javascript
Web前端框架Angular4.0.0 正式版发布
2017/03/28 Javascript
vue使用vue-i18n实现国际化的实现代码
2018/04/08 Javascript
用vue 实现手机触屏滑动功能
2020/05/28 Javascript
Vue+penlayers实现多边形绘制及展示
2020/12/24 Vue.js
[02:33]DOTA2英雄基础教程 司夜刺客
2013/12/04 DOTA
[33:17]OG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
用实例分析Python中method的参数传递过程
2015/04/02 Python
用生成器来改写直接返回列表的函数方法
2017/05/25 Python
利用Tkinter(python3.6)实现一个简单计算器
2017/12/21 Python
Python实现针对给定字符串寻找最长非重复子串的方法
2018/04/21 Python
Falsk 与 Django 过滤器的使用与区别详解
2019/06/04 Python
Python中print函数简单使用总结
2019/08/05 Python
Pyspark获取并处理RDD数据代码实例
2020/03/27 Python
通过python 执行 nohup 不生效的解决
2020/04/16 Python
Python3爬虫中关于Ajax分析方法的总结
2020/07/10 Python
matplotlib设置颜色、标记、线条,让你的图像更加丰富(推荐)
2020/09/25 Python
Perfume’s Club美国官网:西班牙第一家在线美容店
2020/06/10 全球购物
五一服装活动方案
2014/01/11 职场文书
小学教师办公室制度
2014/02/03 职场文书
奖励通知
2015/04/22 职场文书
感恩教师主题班会
2015/08/12 职场文书
高中体育课教学反思
2016/02/16 职场文书
2019年教师节祝福语精选,给老师送上真诚的祝福
2019/09/09 职场文书
图文详解Nginx版本平滑升级方案
2021/09/15 Servers
MySQL库表太大怎么办? 数据库分库分表项目实践
2022/04/11 MySQL
Smart 2 车辆代号 HC11 全新谍照曝光
2022/04/21 数码科技
Windows server 2022创建创建林、域树、子域的步骤
2022/06/25 Servers