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屬性。