js 传递多个不定个数的参数应该怎么写

issmile
  • 947

想自定义个log 函数,不仅在控制台输出,也在文本框中输出

log(obj)=>{
    console.log(obj)
}

但是console.log()是可以传递N个参数的,比如console.log(a,b,c,d,e,f.....),
而我自定义的log,应该怎么写?log(a,b,c,d,e)=>{}好像不应该这样,
我隐约记得有些源码好像会这么写log(arg...)=>{},然后我去百度具体的方法,但是都百度不到,所以来这里请教大神,应该怎么写这个不定个数的参数?

回复
阅读 6.4k
5 个回答

在es6前,一般用arguments作为不定数参数传输的参数获取途径,比如

function abc(){
    var len=arguments.length;
    for(var i=0;i<len;i++){
        console.log("调用参数"+i+"是:"+arguments[i]+"\n");
    }
}

abc("a","b");

在es6中
可以用...来命名不定数参数名,这样比之前版本比可以其一个更有意义的参数名,需要注意的是不定参数只能是最后一个参数,且一个函数定义中只能有一个不定参数
例如:

function abc1(...vars){
    let len = vars.length;
    for(let i=0;i<len;i++){
        console.log("调用参数"+i+"是:"+vars[i]+"\n");
    }
}

function abc3(name,...vars){
    let len = vars.length;
    for(let i=0;i<len;i++){
        console.log("name是"+name+"调用参数"+i+"是:"+vars[i]+"\n");
    }
}

是要找arguments或者function (a, ...args){};

不知道是不是这个。

    function test(...a){
        console.log(a,...a);
        if(a[0]){ // 是否存在第一个参数
           // do something
        }
         if(a[1]){ // 是否存在第二个参数
           // do something
        }
        ....
    }
    test(1,2,3) 

所有实参数组,arguments

函数参数透出
方法就是上面提到的两种,这里总结一下

  1. arguments
  2. rest参数(...变量名)

提供几种实现方案:

let log = (...params)=>{
    console.log(...params)
}

2.

function log() {
  console.log(...arguments)
}

3.

function log() {
  console.log.apply(undefined, arguments)
}
你知道吗?

宣传栏