在函数命名参数前添加三个点 ...
就表明这是一个不定参数,该参数为一个数组,包含着自它之后传入的所有参数,通过这个数组名即可逐一访问里面的参数。
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;
}
不定参数 keys 包含的是 object 之后传入的所有参数(而 arguments 对象包含的则是所有传入的参数,包含 object)。
tips:函数的 length 属性统计的是函数命名参数的数量,不定参数的加入不会影响 length 属性的值。
使用限制
每个函数最多只能声明一个不定参数,而且一定要放在所有参数的末尾。
function picker(object, ...keys, last) {
// 执行逻辑
}
picker() // 报错
不定参数不能用于对象字面量 setter 之中。
let object = {
// 报错
set name(...value) {
// 执行逻辑
}
}
对象字面量 setter 的参数有且只能有一个。而在不定参数的定义中,参数的数量可以无限多,所以在当前上下文中不允许使用不定参数。