2

我想用可变长度参数调用 console.log 函数

function debug_anything() {
  var x = arguments;
  var p = 'DEBUG from ' + (new Error).stack.split("\n")[2];
  switch(x.length) {
    case 0: console.log(p); break;
    case 1: console.log(p,x[0]); break;
    case 2: console.log(p,x[0],x[1]); break;
    case 3: console.log(p,x[0],x[1],x[2]); break;
    case 4: console.log(p,x[0],x[1],x[2],x[3]); break;
    // so on..
  }
}

是否有任何(更短的)其他方式,请注意我不想要这个解决方案(因为将输出来自 x 对象(参数或数组)的其他方法。

console.log(p,x);
4

3 回答 3

5

是的,您可以使用apply

console.log.apply(console, /* your array here */);

完整代码:

function debug_anything() {
  // convert arguments to array
  var x = Array.prototype.slice.call(arguments, 0);

  var p = 'DEBUG from ' + (new Error).stack.split("\n")[2];

  // Add p to the beggin of x
  x.unshift(p);
  // do the apply magic again
  console.log.apply(console, x);
}
于 2013-01-05T06:48:24.920 回答
3
function debug_anything() {
  var x = arguments;
  var p = 'DEBUG from ' + (new Error).stack.split("\n")[2];
    console.log.apply(console, [p].concat(Array.prototype.slice.call(x)));
}
于 2013-01-05T06:59:18.100 回答
1

只是join数组

function debug_anything() {
  var x = Array.prototype.slice.call(arguments, 0);
  var p = 'DEBUG from ' + (new Error).stack.split("\n")[2];

  console.log(p, x.join(', '));
}
于 2013-01-05T06:47:57.667 回答