这里需要注意2点:
-
rest参数必须是函数的最后一个参数, 它的后面不能再定义参数, 否则会报错。
-
rest参数不计入函数的 length 属性中
建议:
-
所有配置项都应该集中在一个对象,放在最后一个参数,布尔值不可以直接作为参数。这样方便调用者以任何顺序传递参数。
-
不要在函数体内使用arguments变量,使用rest运算符(…)代替。因为rest运算符显式表明你想要获取参数,而且arguments是一个类似数组的对象,而rest运算符可以提供一个真正的数组。
-
使用默认值语法设置函数参数的默认值。
扩展运算符
扩展运算符类似 rest运算符的逆运算, 用 ...
表示, 放在一个(类)数组前, 将该数组展开成独立的元素序列:
console.log(1, …[2, 3, 4], 5); //输出1, 2, 3, 4, 5
扩展运算符的用处很多:
- 可以用于快速改变类数组对象为数组对象, 也是用于其他可遍历对象:
[…document.querySelectorAll(‘li’)]; //[
- ,
- ,
- ];
-
- 结合 rest 参数使函数事半功倍:
function push(arr, …val){
return arr.push(…val); //调用函数时, 将数组变为序列
}
- 替代 apply 写法
var arr = [1, 2, 3];
var max = Math.max(…arr); //3
var arr2 = [4, 5, 6];
arr.push(…arr2); //[1, 2, 3, 4, 5, 6]
new Date(…[2013, 1, 1]); //ri Feb 01 2013 00: 00: 00 GMT+0800 (CST)
- 连接, 合并数组
var more = [4, 5];
var arr = [1, 2, 3, …more]; //[1, 2, 3, 4, 5]
var a1 = [1, 2];
var a2 = [3, 4];
var a3 = [5, 6];
var a = […a1, …a2, …a3]; //[1, 2, 3, 4, 5, 6]
- 解构赋值
var a = [1, 2, 3, 4, 5];
var [a1, …more] = a; //a1 = 1, more = [2, 3, 4, 5]
//注意, 扩展运算符必须放在解构赋值的结尾, 否则报错
- 字符串拆分
var str = “hello”;
var alpha = […str]; //alpha = [‘h’, ‘e’,