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 相关文章推荐
10个新的最有前途的JavaScript框架
Mar 12 Javascript
jQuery获取浏览器中的分辨率实现代码
Apr 23 Javascript
使用js操作cookie的一点小收获分享
Sep 03 Javascript
js确认删除对话框效果的示例代码
Feb 20 Javascript
纯JavaScript实现获取onclick、onchange等事件的值
Dec 29 Javascript
jquery使用hide方法隐藏指定id的元素
Mar 30 Javascript
微信小程序 数据绑定详解及实例
Oct 25 Javascript
javascript iframe跨域详解
Oct 26 Javascript
利用node.js搭建简单web服务器的方法教程
Feb 20 Javascript
axios发送post请求springMVC接收不到参数的解决方法
Mar 05 Javascript
ES6知识点整理之函数数组参数的默认值及其解构应用示例
Apr 17 Javascript
element ui分页多选,翻页记忆的实例
Sep 03 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脚本的10个技巧(7)
2006/10/09 PHP
php tp验证表单与自动填充函数代码
2012/02/22 PHP
ThinkPHP视图查询详解
2014/06/30 PHP
php对象和数组相互转换的方法
2015/05/12 PHP
PHP实现根据时间戳获取周几的方法
2016/02/26 PHP
TP5框架使用QueryList采集框架爬小说操作示例
2020/03/26 PHP
PHP中abstract(抽象)、final(最终)和static(静态)原理与用法详解
2020/06/05 PHP
javascript动态改变img的src属性图片不显示的解决方法
2010/10/20 Javascript
在jQuery ajax中按钮button和submit的区别分析
2012/10/07 Javascript
js showModalDialog参数的使用详解
2014/01/07 Javascript
jquery实现横向图片轮播特效代码分享
2015/11/19 Javascript
JS中BOM相关知识点总结(必看篇)
2016/11/22 Javascript
[js高手之路]寄生组合式继承的优势详解
2017/08/28 Javascript
将Sublime Text 3 添加到右键中的简单方法
2017/12/12 Javascript
详解nodeJs文件系统(fs)与流(stream)
2018/01/24 NodeJs
JavaScript设计模式之建造者模式实例教程
2018/07/02 Javascript
Vue源码之关于vm.$delete()/Vue.use()内部原理详解
2019/05/01 Javascript
vue-cli单页面预渲染seo-prerender-spa-plugin操作
2020/08/10 Javascript
vue+axios 拦截器实现统一token的案例
2020/09/11 Javascript
举例讲解Python的lambda语句声明匿名函数的用法
2016/07/01 Python
Django返回json数据用法示例
2016/09/18 Python
解决Pycharm后台indexing导致不能run的问题
2019/06/27 Python
Python ORM编程基础示例
2020/02/02 Python
使用jupyter notebook直接打开.md格式的文件
2020/04/10 Python
Python OpenCV读取中文路径图像的方法
2020/07/02 Python
Python之字典对象的几种创建方法
2020/09/30 Python
CSS3制作文字半透明倒影效果的两种实现方式
2014/08/08 HTML / CSS
简历中自我评价范文3则
2013/12/14 职场文书
前台文员个人求职信范文
2014/01/05 职场文书
2014院党委领导班子及其成员群众路线对照检查材料思想汇报
2014/10/04 职场文书
酒店办公室主任岗位职责
2015/04/01 职场文书
2015年班主任德育工作总结
2015/05/21 职场文书
python3实现无权最短路径的方法
2021/05/12 Python
一篇文章搞懂python混乱的切换操作与优雅的推导式
2021/08/23 Python
使用Python解决图表与画布的间距问题
2022/04/11 Python
使用Python开发贪吃蛇游戏 SnakeGame
2022/04/30 Python