我想调用带有可变长度参数的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对象(Argument或数组)中的其他方法。
console.log(p,x);
答案 0 :(得分: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);
}
答案 1 :(得分: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)));
}
答案 2 :(得分: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(', '));
}