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_ ...
随机推荐
- reentrant,thread-safe 和 async-signal-safe
可重入,线程安全和异步信号安全POSIX定义: Reentrant Function A function whose effect, when called by two or more threa ...
- Mac下进入MySQL命令行
/usr/local/MySQL/bin/mysql -u root -p 其中,root为数据库用户名
- 【ARM-Linux开发】【CUDA开发】NVIDIA TEGRA X1:LINUX驱动程序包多媒体用户指南
NVIDIA TEGRA X1:LINUX驱动程序包多媒体用户指南 转载请注明作者和出处:http://blog.csdn.net/u011475210 嵌入式平台:NVIDIA Jetson TX1 ...
- Android EditText禁止回车换行
在做一个登录页面的时候,发现了输入手机号的EditText可以输入回车的bug,影响用户体验,在此分享下解决办法. 百度了很多,都是设置singline=true的或者设置maxLines=" ...
- 构建C1000K的服务器(1) – 基础
转自: http://www.ideawu.net/blog/archives/740.html 著名的 C10K 问题提出的时候, 正是 2001 年, 到如今 12 年后的 2013 年, C10 ...
- Math 类
Math 类 java.lang.Object java.lang.Math 方法签名 public final class Math extends Object public static fin ...
- IDEA配置类签名
- SQL Server 系统库的备份与恢复
master数据库 master作为数据库的主要数据库,记录着SQL Server系统的所有系统级信息,例如登录用户.系统配置设置.端点和凭证以及访问其他数据服务器所需要的信息.master数据库还记 ...
- kali更新软件源
首先就是修改软件源文件 /etc/apt/sources.list 可以用leafpad打开,在终端中键入: leafpad /etc/apt/sources.list 原码是kali官方的软件源,更 ...
- 给element添加自定义图标
element为我们提供了丰富的好用的组件,图标的样式也很多,但还是有一些常用的图标没有在官方图标库里边,比如说微信.淘宝.支付宝等等.那么如何把我们需要的图标添加到进去呢? 因为element有官方 ...