在函数命名参数前添加三个点 ... 就表明这是一个不定参数,该参数为一个数组,包含着自它之后传入的所有参数,通过这个数组名即可逐一访问里面的参数。
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 的参数有且只能有一个。而在不定参数的定义中,参数的数量可以无限多,所以在当前上下文中不允许使用不定参数。
