1.使用不具名参数 (arguments)
2.剩余参数(…)
使用不具名参数
es5的不具名参数
前面说的参数都是:在函数定义中的已被命名的参数.
然而 JS 的函数并不强求 参数的数量要等于已定义具名参数的数量,
你所传递的参数总是允许少于或多于正式指定的参数。
function pick(object) {
let result = Object.create(null);
for(let i = 0, len = arguments.length; i < len; i++) {
result[arguments[i]] = object[arguments[i]];
}
return result;
}
// pick('1', 2, 'abc');
let book = {
title: 'undestanding ES6',
author: 'Nicholsa',
year: 2015
};
let data = pick(book, 'author', 'year');
console.log(data);
该函数能够处理多个参数;
剩余参数
es6的剩余参数(rest parameter)
由三个点( ... )与一个紧跟着的具名参数指定
function pick(object, ...keys) {
let result = Object.create(null);
for (let i = 0, len = keys.length; i < len; i++) {
result[keys[i]] = object[keys[i]];
}
return result;
}
let book = {
title: 'undestanding ES6',
author: 'Nicholsa',
year: 2015
};
let data = pick(book, 'author', 'year');
console.log(data);
keys 是一个包含所有在 object 之后的参数的剩余参数
arguments 是包含所 有参数.
但是:一个函数只能有一个剩余参数,并且它必须被放在最后
function pick( object, ...keys, last) {
// 语法错误:不能在剩余参数后使用具名参数
let result = Object.create(null);
for (let i = 0, len = keys.length; i < len; i++) {
result[keys[i]] = object[keys[i]];
}
return result;
}
pick('aa', 'bb', 'cc');
设计剩余参数是为了替代 ES 中的 arguments ,虽然 arguments 仍未在语言中被移除.
function checkArgs(...args) {
console.log(args.length);
console.log(arguments.length);
console.log(args[0], arguments[0]);
console.log(args[1], arguments[1]);
}
checkArgs("a", "b");
网友评论