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 相关文章推荐
Javascript miscellanea -display data real time, using window.status
Jan 09 Javascript
JS实现图片横向滚动效果示例代码
Sep 04 Javascript
获取下拉列表框的值是数组,split,$.inArray示例
Nov 13 Javascript
javaScript 计算两个日期的天数相差(示例代码)
Dec 27 Javascript
用html5 js实现点击一个按钮达到浏览器全屏效果
May 28 Javascript
详解WordPress开发中get_current_screen()函数的使用
Jan 11 Javascript
全面解析Javascript无限添加QQ好友原理
Jun 15 Javascript
jQuery简单实现iframe的高度根据页面内容自适应的方法
Aug 01 Javascript
浅谈Angular4中常用管道
Sep 27 Javascript
浅谈Vue Element中Select下拉框选取值的问题
Mar 01 Javascript
原生js实现二级联动菜单
Nov 27 Javascript
react PropTypes校验传递的值操作示例
Apr 28 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数据库连接
2006/10/09 PHP
php curl的深入解析
2013/06/02 PHP
PHP PDOStatement对象bindpram()、bindvalue()和bindcolumn之间的区别
2014/11/20 PHP
php封装好的人民币数值转中文大写类
2015/12/20 PHP
ThinkPHP中调用PHPExcel的实现代码
2017/04/08 PHP
基于ThinkPHP5框架使用QueryList爬取并存入mysql数据库操作示例
2019/05/25 PHP
TP5框架实现一次选择多张图片并预览的方法示例
2020/04/04 PHP
基于jQuery的图片大小自动适应实现代码
2010/11/17 Javascript
JavaScript中的16进制字符(改进)
2011/11/21 Javascript
JavaScript实现的字符串replaceAll函数代码分享
2015/04/02 Javascript
js实现Form栏显示全格式时间时钟效果代码
2015/08/19 Javascript
学习使用jquery iScroll.js移动端滚动条插件
2020/03/24 Javascript
jquery zTree异步加载、模糊搜索简单实例分享
2016/03/24 Javascript
JS弹出新窗口被拦截的解决方法
2016/08/09 Javascript
jQuery实现导航滚动到指定内容效果完整实例【附demo源码下载】
2016/09/20 Javascript
基于JavaScript实现报警器提示音效果
2017/10/27 Javascript
微信小程序获取手机号授权用户登录功能
2017/11/09 Javascript
详解bootstrap-fileinput文件上传控件的亲身实践
2019/03/21 Javascript
Antd的table组件表格的序号自增操作
2020/10/27 Javascript
vue中defineProperty和Proxy的区别详解
2020/11/30 Vue.js
简单介绍Python中的JSON使用
2015/04/28 Python
Python字符串逐字符或逐词反转方法
2015/05/21 Python
Python 3.8新特征之asyncio REPL
2019/05/28 Python
Djang的model创建的字段和参数详解
2019/07/27 Python
python3 使用traceback定位异常实例
2020/03/09 Python
python高阶函数map()和reduce()实例解析
2020/03/16 Python
如何解决pycharm调试报错的问题
2020/08/06 Python
Python实现壁纸下载与轮换
2020/10/19 Python
vue 中 get / delete 传递数组参数方法
2021/03/23 Vue.js
建筑实习自我鉴定
2013/10/18 职场文书
药学职务聘任书
2014/03/29 职场文书
机电一体化应届生求职信
2014/08/09 职场文书
汽车销售助理岗位职责
2015/04/14 职场文书
《雪域豹影》读后感:父爱的伟大
2019/12/23 职场文书
「海贼王」112.9万粉丝纪念图标公布
2022/03/21 日漫
基于redis+lua进行限流的方法
2022/07/23 Redis