剩餘參數與arguments對象

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章