1、剩余参数
剩余参数语法允许将一个不定数量的参数表示为一个数组。
表示:一个普通标识符前加3个点 ,例: ...args
const sum=(f,...args)=>{
console.log(f); //1
console.log(args); //[2,3]
}
sum(1,2,3)
案例:接收不定数量参数,求所有参数的和。
方法一:
const sum=(...args)=>{
let total=0;
args.forEach(item=>total+=item)
return total;
}
console.log(sum(1,2)) //3
console.log(sum(1,2,3)) //6
方法二:
const sum=(...args)=>{
return args.reduce((a,b)=>a+b);
}
console.log(sum(1,2)) //3
console.log(sum(1,2,3)) //6
2、类数组对象 arguments
arguments是类数组对象,它和数组相似,拥有length属性和索引元素,但它不是一个真正的数组,所以不能使用数组的方法。
arguments转换为数组的方法:
var args1 = Array.prototype.slice.call(arguments);
var args2 = [].slice.call(arguments);
var args3 = Array.from(arguments);
var args4 = [...arguments];
上面案例用arguments对象实现:arguments 不能用forEach方法和reduce方法,因为forEach方法和reduce方法用于数组。
方法三:
function sum(){
var total=0;
for(var i=0;i<arguments.length;i++){
total+=arguments[i];
}
return total;
}
console.log(sum(1,2)) //3
console.log(sum(1,2,3,4)) //10
剩余参数和 arguments对象的区别:
- 剩余参数只包含那些没有对应形参的实参,而 arguments 对象包含了传给函数的所有实参。
- 剩余参数是真正的Array实例,而arguments对象不是一个真正的数组,arguments也就不能使用数组的方法。
- arguments对象还有一些附加的属性 ,如callee属性。