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样式表
Aug 20 Javascript
javascript与cookie 的问题详解
Nov 11 Javascript
jQuery插件slick实现响应式移动端幻灯片图片切换特效
Apr 12 Javascript
JS基于FileSystemObject创建一个指定路径的TXT文本文件
Aug 05 Javascript
简单的JS轮播图代码
Jul 18 Javascript
javascript中的try catch异常捕获机制用法分析
Dec 14 Javascript
详解vue.js组件化开发实践
Dec 14 Javascript
vue自定义全局组件(自定义插件)的用法
Jan 30 Javascript
json数据传到前台并解析展示成列表的方法
Aug 06 Javascript
通过jquery的ajax请求本地的json文件方法
Aug 08 jQuery
小程序根据手机机型设置自定义底部导航距离
Jun 04 Javascript
原生JavaScript实现拖动校验功能
Sep 29 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
怎样辨别一杯好咖啡
2021/03/03 新手入门
php学习笔记 数组的常用函数
2011/06/13 PHP
ThinkPHP控制器里javascript代码不能执行的解决方法
2014/11/22 PHP
提交表单后 PHP获取提交内容的实现方法
2016/05/25 PHP
Laravel框架分页实现方法分析
2018/06/12 PHP
Uglifyjs(JS代码优化工具)入门 安装使用
2020/04/13 Javascript
jquery zTree异步加载简单实例分享
2013/02/05 Javascript
Textbox控件注册回车事件及触发按钮提交事件具体实现
2013/03/04 Javascript
浅谈javascript中this在事件中的应用
2015/02/15 Javascript
JavaScript学习笔记之检测客户端类型是(引擎、浏览器、平台、操作系统、移动设备)
2015/12/03 Javascript
JavaScript原型及原型链终极详解
2016/01/04 Javascript
基于jquery实现智能提示控件intellSeach.js
2016/03/17 Javascript
利用Jquery队列实现根据输入数量显示的动画
2016/09/01 Javascript
Angular.js实现注册系统的实例详解
2016/12/18 Javascript
微信小程序 textarea 组件详解及简单实例
2017/01/10 Javascript
javascript 中iframe高度自适应(同域)实例详解
2017/05/16 Javascript
vue 移动端适配方案详解
2018/11/15 Javascript
js中的this的指向问题详解
2019/08/29 Javascript
Python编程中运用闭包时所需要注意的一些地方
2015/05/02 Python
Python读取和处理文件后缀为.sqlite的数据文件(实例讲解)
2017/06/27 Python
python使用pil进行图像处理(等比例压缩、裁剪)实例代码
2017/12/11 Python
深入分析python数据挖掘 Json结构分析
2018/04/21 Python
Python @property及getter setter原理详解
2020/03/31 Python
python 实现控制鼠标键盘
2020/11/27 Python
css3中less实现文字长阴影(long shadow)
2020/04/24 HTML / CSS
AmazeUI 缩略图的实现示例
2020/08/18 HTML / CSS
1688平价精选商城:阿里集团旗下,工厂出厂价格直销
2017/04/24 全球购物
资深生产主管自我评价
2013/09/22 职场文书
幼儿园教师工作感言
2014/02/15 职场文书
《小蝌蚪找妈妈》教学反思
2014/02/21 职场文书
秸秆管理实施方案
2014/03/15 职场文书
后进基层党组织整改方案
2014/10/25 职场文书
Django 实现jwt认证的示例
2021/04/30 Python
教你用Python+selenium搭建自动化测试环境
2021/06/18 Python
MySQL 外连接语法之 OUTER JOIN
2022/04/09 MySQL
Java数组详细介绍及相关工具类
2022/04/14 Java/Android