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 相关文章推荐
JS判断不同分辨率调用不同的CSS样式文件实现思路及测试代码
Jan 23 Javascript
一个JS函数搞定网页标题(title)闪动效果
May 13 Javascript
浅谈jQuery中的事件
Mar 23 Javascript
MVC Ajax Helper或Jquery异步加载部分视图
Nov 29 Javascript
jQuery Ztree行政地区树状展示(点击加载)
Nov 09 Javascript
javascript中闭包概念与用法深入理解
Dec 15 Javascript
JS中解决谷歌浏览器记住密码输入框颜色改变功能
Feb 13 Javascript
js实现字符全排列算法的简单方法
May 01 Javascript
js实现一个简单的MVVM框架示例
Jan 15 Javascript
JavaScript常用工具函数汇总(浏览器环境)
Sep 17 Javascript
Vue+Openlayers自定义轨迹动画
Sep 24 Javascript
使用Mock.js生成前端测试数据
Dec 13 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+mysql数据库查询实例
2015/01/21 PHP
PHP连接MYSQL数据库的3种常用方法
2017/02/27 PHP
javascript跨浏览器的属性判断方法
2014/03/16 Javascript
js面向对象的写法
2016/02/19 Javascript
jQuery中页面返回顶部的方法总结
2016/12/30 Javascript
解决Node.js使用MySQL出现connect ECONNREFUSED 127.0.0.1:3306的问题
2017/03/09 Javascript
VUE中v-model和v-for指令详解
2017/06/23 Javascript
weex里Vuex state使用storage持久化详解
2017/09/09 Javascript
vue单页面打包文件大?首次加载慢?nginx带你飞,从7.5M到1.3M蜕变过程(推荐)
2018/01/16 Javascript
详解vuex的简单使用
2018/03/12 Javascript
vue实现弹框遮罩点击其他区域弹框关闭及v-if与v-show的区别介绍
2018/09/29 Javascript
JS/HTML5游戏常用算法之路径搜索算法 随机迷宫算法详解【普里姆算法】
2018/12/13 Javascript
vue实现自定义H5视频播放器的方法步骤
2019/07/01 Javascript
Vue+elementui 实现复杂表头和动态增加列的二维表格功能
2019/09/23 Javascript
详解Angular Karma测试的持续集成实践
2019/11/15 Javascript
javascript实现移动端红包雨页面
2020/06/23 Javascript
Python使用gensim计算文档相似性
2016/04/10 Python
Android 兼容性问题:java.lang.UnsupportedOperationException解决办法
2017/03/19 Python
Android分包MultiDex策略详解
2017/10/30 Python
numpy数组拼接简单示例
2017/12/15 Python
python主线程捕获子线程的方法
2018/06/17 Python
python处理数据,存进hive表的方法
2018/07/04 Python
Python 实现取矩阵的部分列,保存为一个新的矩阵方法
2018/11/14 Python
Django框架实现分页显示内容的方法详解
2019/05/10 Python
Django框架自定义模型管理器与元选项用法分析
2019/07/22 Python
Python搭建代理IP池实现存储IP的方法
2019/10/27 Python
python正则表达式 匹配反斜杠的操作方法
2020/08/07 Python
Ubuntu权限不足无法创建文件夹解决方案
2020/11/14 Python
英国快时尚女装购物网站:PrettyLittleThing
2018/08/15 全球购物
老师对学生的寄语
2014/04/09 职场文书
县委常委班子对照检查材料思想汇报
2014/09/28 职场文书
离职报告范文
2014/11/04 职场文书
2014年置业顾问工作总结
2014/11/17 职场文书
2015年生产车间工作总结
2015/04/22 职场文书
个人借条范本
2015/05/25 职场文书
2021好看的国漫排行榜前十名 《完美世界》上榜,《元龙》排名第一
2022/03/18 国漫