剩余参数与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属性。

 

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