注意rest参数是参数不是数组
发布于 8 年前 作者 ThomasHuke 3700 次浏览 来自 分享

其实也没啥分享的就是自己犯下的一个小小的错误

连续的犯了好几次,就想写个话题提醒一下,估计大部人人不会犯错,不过给初学者说一下

rest参数是参数不是数组,

function age (...a){
console.log(a[0])
}
age(参数1,参数2)

注意这里当声明rest参数使用…+参数名称,当调用的时候是使用的参数调用的,rest 参数就是arguments的作用,调用函数的时候一定是参数而不是传入一个数组,如果是像传入一个数组的话就应该使用解构赋值:

function age1 ([a,b]) {
console.log(a)
}
age1([1,2])

如果使用解构赋值了那么相应的是数组,函数调用的就传入一个数组,是对象的话就传入对象age2({a=2,b})这种即可

还有个 … 这个单独使用叫做扩展运算符,它跟rest参数是相对应的通俗点 res参数是指将一些参数汇集成一个数组,然而扩展运算符就是将数组变成一个一个的参数,这在数组的合并,将数组改变为参数,(比如说 push,只能接受参数不能接受数组就可以使用…[])

4 回复

表达有一些问题,看的有点乱…看这里 Rest parameters 就是把非单独命名参数作为一个数组实例供函数内部访问,文档中特意和arguments进行了区分

@DevinXian嗯我看了,总体来说argumens包括了有没有形参的所有实参,然后rest只是说没有形参的实参,另外rest的确免除了转换为数组的麻烦,因为本来就是数组**.ps :** 多谢指出我的不足和错误。🙏

how1.png

从这个图更明显,并且还能看出,arguments的类型是类数组(拥有模式是0,1,2,3的一个对象)然而,rest参数就是单纯的数组而已,这里可以使用Array.from 将arguments对象转化为纯数组。

回到顶部