很多人把 这三个点叫做 Rest 参数 ,我百思不得其解,对照了各种翻译之后,恍然大悟,应该翻译为剩余,剩下的,再引申为"等等...,剩下的这些省略的数据" 最为恰当。... 它出现的场景,这每个点都代表了,一个同维度,各自平等的一组连续的数据,仅此而已。
虽是一家之言,但也算自圆其说。愿各位有所收获,便是极好的。
... 等等等 三个点 ... : 使用场景一:处理 ... rest 形参问题。
看一个例子:
function calculate(operator){if(operator === "+"){let result = 0; // 业务逻辑:加法基础数 0for(let i = 1;i
无论function中定义了多少形参,我们在函数中都可以用这arguments 来接收,这个arguments属于函数的系统变量,无须你自己声明处理逻辑。
吐槽1:由于前头的第一个形参被我们自己声明占用了,不得已我们剩下的那些参数 即调用者传入的参数的arguments索引只能从1开始,这个坑要程序员根据自己实际情况,来编码指定开始索引,费脑子易掉头发。
吐槽2:调用者从形参上看不出来,这个函数是可以接受任意参数的参数的。一个脑筋没转过来,可能就不知道怎么用了。
针对以上问题,ES6 引入了 ... 三个点点——等等剩余参数,官方叫它Rest参数。
function calculate(operator,...restUserData){if(operator === "+"){let result = 0; // 业务逻辑:加法基础数 0for(let i = 0 ;i
累加累乘的数据,就是遍历剩下用户传入的那些rest等等的参数,这时候就无须考虑索引问题了。所以我第个循环,写了一个和索引无关的 for-of 循环。
... 等等等 三个点 ... : 使用场景二:压扁一个引用类型的数据的场景
很多地方都叫它展开运算符,我不得不吐槽,翻译本身也成为了我们学习者不可逾越的障碍,如果一个翻译不好,就会有数以亿计的人,一代一代的人,不停的在一个知识点里,来回的掉坑。其实我看来,叫它Rest依然合适,等等这些省略了的数据,这层意思,依然适合对引用类型的数据,数组和对象。
let a = [1,2,3];console.log(calculate('*',...a)) ; // 等价于 calculate('*',1,2,3)
这里的等... 就有一个数据 flat data,碾平展开 的效果。同样适用于对象:
let father = {species:'人类',planet:'地球',language:'汉语'}let son = {...father,name:'张三'}
意思就是说:...father 身上 “等等... 这些剩下的,省略的” 优秀的属性,也集中到son这个对象身上来了。这样翻译rest是不是毫无违和感。此处要特别注意的是:...出现在定义对象的时候,无须在意rest变量 编码前后顺序,但是出现在方法形参的时候一定要是最后一个,这个就是语言规范。