ES6--不定参数
<一>,在讨论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--不定参数的更多相关文章
- 深入浅出ES6(五):不定参数和默认参数
作者 Jason Orendorff github主页 https://github.com/jorendorff 不定参数 我们通常使用可变参函数来构造API,可变参函数可接受任意数量的参数.例 ...
- 深入浅出ES6:不定参数和默认参数
不定参数 我们通常使用可变参函数来构造API,可变参函数可接受任意数量的参数.例如,String.prototype.concat方法就可以接受任意数量的字符串参数.ES6提供了一种编写可变参函数的新 ...
- 不定参数(rest 参数 ...)
不定参数 如何实现不定参数 使用过 underscore.js 的人,肯定都使用过以下几个方法: _.without(array, *values) //返回一个删除所有values值后的array副 ...
- [js高手之路] es6系列教程 - 不定参数与展开运算符(...)
三个点(...)在es6中,有两个含义: 用在形参中, 表示传递给他的参数集合, 类似于arguments, 叫不定参数. 语法格式: 在形参面前加三个点( ... ) 用在数组前面,可以把数组的值 ...
- javascript es6系列教程 - 不定参数与展开运算符(...)
三个点(...)在es6中,有两个含义: 用在形参中, 表示传递给他的参数集合, 类似于arguments, 叫不定参数. 语法格式: 在形参面前加三个点( ... ) 用在数组前面,可以把数组的值 ...
- es6 默认参数、rest参数、扩展运算符
1.默认值 现在可以在定义函数的时候指定参数的默认值了,而不用像以前那样通过逻辑或操作符来达到目的了. function sayHello(name){ //传统的指定默认参数的方式 var name ...
- golang中不定参数与数组切片的区别
package main import "fmt" func main() { myfunc1(, , , ) //传递不定数量的参数 myfunc2([], , , }) //传 ...
- C技巧:结构体参数转成不定参数
下面这段程序是一个C语言的小技巧,其展示了如何把一个参数为结构体的函数转成一个可变参数的函数,其中用到了宏和内建宏"__VA_ARGS__",下面这段程序可以在GCC下正常编译通过 ...
- 不定参数函数原理以及实现一个属于自己的printf函数
一.不定参数函数原理 二.实现一个属于自己的printf函数 参考博文:王爽汇编语言综合研究-函数如何接收不定数量的参数
- C语言函数不定参数实现方式
函数如何实现不定参数: 由于在C语言中没有函数重载,解决不定数目函数参数问题变得比较麻烦,即使采用C++,如果参数个数不能确定,也很难采用函数重载.对这种情况,提出了指针参数来解决问题. (1)va_ ...
随机推荐
- 工控随笔_C#连接PLC_之_C#入门_02_程序性结构和注释
前段时间看C#本质论,发现内容有点抽象,不适合入门,现在换了一本适合入门的书籍: C#图解教程. //引用命名空间,命名空间相当于一个容器,通过不同的容器来区分同名的内容 //System命名空间是. ...
- [Tool] Give some magic ! 那些奇思妙想的 Chrome 插件
[ Reggy ] - 网站注册类自动填充临时信息,Magic! 但是对于非常规的网站无效.是什么意思呢? 就是说,它不是常规的 form 表单,而是使用 Js 操作数据,所以任何插件都无法自动识别. ...
- ajax处理csrf的三种方式
方式一: $.post({ url: '/get_result/', data: { value0: $('#v1').val(), value1: $('#v2').val(), csrfmiddl ...
- nginx配置优化提高并发量
1 nginx配置优化提高并发量 worker_processes 2; 这个按照CPU的核数来决定 2 worker_connections 65535; 这个一般设置65535即可 每个进程允许的 ...
- 长乐国庆集训Day2
T1 连珠风暴 题目 [题目描述] 给定M种颜色的珠子,每种颜色珠子的个数均不限,将这些珠子做成长度为N的项链. 问能做成多少种不重复的项链.两条项链相同,当且仅当两条项链通过旋转或是翻转后能重合在一 ...
- python学习-29 map函数-filter函数
movie_person = ['小红','小明','小王','富豪_sb','美女_sb'] def filter_test(array): ret = [] for i in array: if ...
- C语言的变参列表 va_list
1. va_list的基本原理和用法 #include<stdio.h> #include<stdarg.h> void func(int i,char *ch,...){ / ...
- 个人学习笔记:C语言程序结构
个人笔记:C语言程序 函数 语句 输入输出对象 标识符 关键字 函数 一个C语言源程序,是由一个或多个函数定义顺序组成的,其中必须有一个函数名为main的主函数.C语言源程序中的函数是指完成特定数据处 ...
- Maven聚合项目的创建
1.项目结构如下 步骤如下: 点击Finish 这里父项目需要加入如下的构建依赖: <dependencyManagement> <dependencies> <depe ...
- windows上git clone命令速度过慢问题的解决
在windows上用git clone 命令克隆一个仓库,速度非常的慢,但是浏览器访问github的速度确挺正常的,我也用了翻墙软件(SSR). git设置一下全局代理可以解决这个问题: git co ...