<一>,在讨论ES6的不定参数之前,我们先一起回顾一下ECMAScript5的无名参数。

  早先,javascript提供arguments对象检查函数的所有参数,从而不必定义每一个要用的参数。尽管arguments象检查在大多数情况下运行良好,但是实际使用起来却有些笨重。

function pink(o) {
let result = Object.create(null);
// 从第二个参数开始
for (let i = 1; i < arguments.length; i++){
result[arguments[i]] = o[arguments[i]];
}
return result;
}
let book = {
title:"武汉",
author:"yyy"
};
let books = pink(book,'author','age');
console.log(books); //打印结果
{ author: 'yyy', age: undefined }

  这个函数要注意的事项:

  1. 并不容易发现这个函数可以接受任意数量的参数,当然,可以定义更多的参数;

  2. 因为第一个参数为命名参数且已被使用,当要查找需要拷贝的属性名称时,不得不从索引1开始而不是从索引0开始。

  <二> ES6不定参数来解决以上缺陷

  用法: 在函数的命名参数前面添加三个(...)就表明是一个不定参数,该参数为一个数组,包含着自它之后传入的所有参数,通过这个数组名即可逐一g访问里面的参数。举个例子,使用不定参数重写pink()方法。

function pink(o,...keys) {
let result = Object.create(null); for(let i = 0; i < keys.length; i++){
result[keys[i]] = o[keys[i]];
}
return result;
} let book = {
title:"武汉",
author:"yyy"
};
let books = pink(book,'author','age','name'); console.log(books);
// 打印结果
{ author: 'yyy', age: undefined, name: undefined }

  备注不定参数的使用限制:

  1. 每个函数最多只能有一个不定参数而且一定要放在所有参数的末尾

错误用法

function pink(o,...keys,last) {
// 函数体
}

  2. 不定参数不能用于对象字面量setter之中

错误用法

function pink(o,...keys) {
// 函数体
set name(...value){ }
}

  3. 不定参数对argements对象的影响

如果声明函数时定义了不定参数,则在函数被调用时,arguments对象包含了所有传入函数的参数。例如:

function chenkArgs(...args) {
console.log(args.length); //
console.log(arguments); // { '0': 'a', '1': 'wuhan' }
console.log(args[0], arguments[0]); // a a
console.log(args[1], arguments[1]); // wuhan wuhan
}
chenkArgs('a','wuhan');

ES6--不定参数的更多相关文章

  1. 深入浅出ES6(五):不定参数和默认参数

    作者 Jason Orendorff  github主页  https://github.com/jorendorff 不定参数 我们通常使用可变参函数来构造API,可变参函数可接受任意数量的参数.例 ...

  2. 深入浅出ES6:不定参数和默认参数

    不定参数 我们通常使用可变参函数来构造API,可变参函数可接受任意数量的参数.例如,String.prototype.concat方法就可以接受任意数量的字符串参数.ES6提供了一种编写可变参函数的新 ...

  3. 不定参数(rest 参数 ...)

    不定参数 如何实现不定参数 使用过 underscore.js 的人,肯定都使用过以下几个方法: _.without(array, *values) //返回一个删除所有values值后的array副 ...

  4. [js高手之路] es6系列教程 - 不定参数与展开运算符(...)

    三个点(...)在es6中,有两个含义: 用在形参中, 表示传递给他的参数集合, 类似于arguments, 叫不定参数. 语法格式:  在形参面前加三个点( ... ) 用在数组前面,可以把数组的值 ...

  5. javascript es6系列教程 - 不定参数与展开运算符(...)

    三个点(...)在es6中,有两个含义: 用在形参中, 表示传递给他的参数集合, 类似于arguments, 叫不定参数. 语法格式:  在形参面前加三个点( ... ) 用在数组前面,可以把数组的值 ...

  6. es6 默认参数、rest参数、扩展运算符

    1.默认值 现在可以在定义函数的时候指定参数的默认值了,而不用像以前那样通过逻辑或操作符来达到目的了. function sayHello(name){ //传统的指定默认参数的方式 var name ...

  7. golang中不定参数与数组切片的区别

    package main import "fmt" func main() { myfunc1(, , , ) //传递不定数量的参数 myfunc2([], , , }) //传 ...

  8. C技巧:结构体参数转成不定参数

    下面这段程序是一个C语言的小技巧,其展示了如何把一个参数为结构体的函数转成一个可变参数的函数,其中用到了宏和内建宏"__VA_ARGS__",下面这段程序可以在GCC下正常编译通过 ...

  9. 不定参数函数原理以及实现一个属于自己的printf函数

    一.不定参数函数原理 二.实现一个属于自己的printf函数 参考博文:王爽汇编语言综合研究-函数如何接收不定数量的参数

  10. C语言函数不定参数实现方式

    函数如何实现不定参数: 由于在C语言中没有函数重载,解决不定数目函数参数问题变得比较麻烦,即使采用C++,如果参数个数不能确定,也很难采用函数重载.对这种情况,提出了指针参数来解决问题. (1)va_ ...

随机推荐

  1. 记一次偶发的bug排查——redis-py-cluster库的bug

     排查流水账: 通过平台监控,发现很多偶发的查看推荐列表的接口时延大于0.5s 写单元测试,不能重现.在测试环境不能重现.只有在正式环境可以偶发重现. 通过日志埋点,等待重现 不断地加日志埋点后发现耗 ...

  2. win7安装 nodejs,npm

    1. 下载地址:http://nodejs.org/dist/v9.7.1/ 2. 安装 3. 查看是否安装成功,命令行查询 node  -v 4. 默认已经安装了npm,直接查询版本 5. 配置np ...

  3. 1.3.1 LVM条带化error

    报错:​ #pvcreate /dev/dfb2 /dev/dfa2 /dev/dfc2 /dev/dfd2 already exists in filesystem   Can't open /de ...

  4. Docker容器数据管理(数据卷&数据卷容器)

    一:前言 在Docker容器的实际使用中,经常会遇到容器的数据持久化,容器之间的数据共享等问题,通常我们有两种解决方案: 1)数据卷(Data Volumes):就是将容器内数据直接映射到本地主机环境 ...

  5. IntelliJ IDEA 删除自定义的 Maven 框架依赖

    IntelliJ IDEA 删除自定义的 Maven 框架依赖 IntelliJ Idea中添加Maven Archetype,但是IntelliJ Idea中并没有提供删除的方法. windows中 ...

  6. LocalStack和Local对象实现栈的管理

    flask里面有两个重要的类Local和LocalStack 输入from flask import globals 左键+ctrl点globals进入源码,进去后找57行 flask只会实例化出这两 ...

  7. Delphi快递鸟【支持快递查询和单号识别】

    作者QQ:(648437169) 点击下载➨Delphi快递鸟 [delphi快递鸟]支持快递查询.单号识别.

  8. 国际化地区语言码对照表(i18n)

    af 公用荷兰语 af-ZA 公用荷兰语 - 南非 sq 阿尔巴尼亚 sq-AL 阿尔巴尼亚 -阿尔巴尼亚 ar 阿拉伯语 ar-DZ 阿拉伯语 -阿尔及利亚 ar-BH 阿拉伯语 -巴林 ar-EG ...

  9. 删除elasticsearch 30天前的所有索引

    我的索引格式为 xxx-xxx-xxx-2019.06.27 xxx-xxxx-2019.06.27 脚本思路: 获取目前 es上所有索引,以日期进行拆分,然后用索引时间对比一个月前的日期,日期小于一 ...

  10. Drool7s kmodule的作用--系列02课

    本文是介绍drool7s kmodule. 一.为什么komdule.xml文件一定要放在resources下的META-INF文件夹中 --->直接看源码吧,请看下图,应该都知道为什么要放在固 ...