2

我正在使用一个文档非常糟糕的 javascript API,并且需要编写未记录参数的回调函数。作为开始步骤,我需要检查传入的内容。如果我知道只有一个输入,我可以将回调函数设置为

function( stuff ){
    console.log(stuff);
}

并从那里工作。当我不知道有多少输入时,是否有一种优雅的方式来检查输入?我可以做类似的事情

function(a,b,c,d,e,f){
    console.log(a) 
    console.log(b) // is this undefined?
    console.log(c) // how about now?
      ....
    console.log(f) // if this isn't undefined I need to do it again with more args
}

它会正常工作,但它很丑陋。有没有更简单的方法来找出有多少个参数被传递给一个函数?

4

3 回答 3

6

循环arguments对象:

function f(){
    for(var prop in arguments) {
        console.log(arguments[prop]);
    }
}
f(1); // logs 1
f(1, 2); // logs 1, then 2

作为arguments类似数组的对象,您也可以for根据其length属性使用常规循环对其进行迭代:

for(var i=0; i<arguments.length; i++) {
    console.log(arguments[i]);
}
于 2013-09-27T21:55:29.463 回答
3

看起来你在 after arguments,它为你提供了一个传递给当前函数的参数数组:

var f = function() {
    console.log(arguments);
}
f(1, '2');
f(1, 2, 3, 4, 5);

小提琴

于 2013-09-27T21:56:36.040 回答
1

使用参数

function unknown() {
  for (var i=0;i<arguments.length;i++) {
    console.log('arg '+i+' : ',arguments[i]);
   }
}

unknown(123, 'test', [1, 2, 3]);


arg 0 :  123
arg 1 :  test
arg 2 :  [1, 2, 3] 
于 2013-09-27T21:58:26.790 回答