更新:这是我的解决方案(灵感来自已接受的答案):
function log(msg, values) {
if(config.log == true){
msg = [msg];
var args = msg.concat(values);
console.log.apply( this, args );
}
}
UPDATE2:更好的解决方案:
function log(msg) {
if(config.log == true){
msg = [msg];
var values = Array.prototype.slice.call(arguments, 1);
var args = msg.concat(values);
console.log.apply( console, args );
}
}
你可以这样称呼这个版本:
log("Hi my name is %s, and I like %s", "Dave", "Javascript");
以下是原始问题:
console.log
接受一个字符串并用值替换标记,例如:
console.log("My name is %s, and I like %", 'Dave', 'Javascript')
会打印:
My name is Dave, and I like Javascript
我想把它包装在一个像这样的方法中:
function log(msg, values) {
if(config.log == true){
console.log(msg, values);
}
}
'values'arg可能是单个值或几个可选的args。我怎么能做到这一点?
如果我这样称呼它:
log("My name is %s, and I like %s", "Dave", "Javascript");
我得到了这个(它不会将“Javascript”识别为第三个参数):
My name is Dave, and I like %s
如果我这样称呼:
log("My name is %s, and I like %s", ["Dave", "Javascript"]);
然后它将第二个arg视为一个数组(它不会扩展为多个args)。我错过了什么技巧来扩展可选的args?
答案 0 :(得分:2)
您正在寻找arguments
标识符,它是一个类似于数组的对象(但不是实际数组),其中包含传递给函数的所有参数。
在你的例子中,你可以得到一个包含所有参数的数组,如下所示:
var values = Array.prototype.slice.call(arguments, 1);
答案 1 :(得分:2)
虽然这不是jQuery相关的,但无论如何我都可以尝试回答:)
以下可能有效(未经测试):
function log(msg, values) {
if(typeof config.log != 'undefined' ) {
if( typeof values != 'Array' ) {
values = [values];
}
values.unshift( msg );
console.log.apply( this, values );
}
}
答案 2 :(得分:1)
@azatoth创建了一个智能答案,但由于在Chrome中不起作用,我会使用简单的字符串连接:
function log(msg, values) {
if (undefined != console) {
var newArg = '';
var newMsg = msg.split('%s');
if (undefined != values) {
for (i=0; i < (newMsg.length-1); i++) {
newArg += newMsg[i] + values[i];
}
} else {
newArg = newMsg[0];
}
console.log( newArg );
}
}
答案 3 :(得分:-2)
编辑: 我很惊讶这没用,所以我回去看了上面的所有内容。
戴夫,如果你想这样称呼:log("My name is %s, and I like %s", 'Dave', 'Javascript');
然后最简单的解决方案就是:
function log() {
if(console.log !== null){
console.log.apply(console,arguments);
}
}
哦,console.log == true
对我来说无法在FF或Chrome中运行。只有console.log != null
有效。在IE7中没有任何工作,请参见图。
ORIGINAL(不好)回答:
Javascript有一个特殊的'arguments'变量,可以完全满足您的需求。
function log(msg, arguments) {
if(config.log == true){
console.log(msg, arguments);
}
}