这个javascript函数可能吗?

时间:2012-05-09 00:06:45

标签: javascript

调试时我经常写一些类似console.log("foo:"+foo+", bar:"+bar)的内容,是否可以编写一个函数logValues(foo,bar)来提供相同的输出?基本上我在问是否有办法从变量变为该变量的名称。我是否必须使用索引屈服[0]: 'value of foo, [1]: 'value of bar'

为参数数组设置循环

感谢您阅读

4 个答案:

答案 0 :(得分:2)

试试这段代码:

var logValues = function(){
    var args = arguments;
    for(var i in args)
        window.console.log(args[i] + ": " + eval(args[i]));
}
logValues("foo","bar");

答案 1 :(得分:2)

(这些选项都没有直接回答这个问题;但是应该为你要做的事情提供更好的选择)

WebKit的检查员(我假设Firebug)允许您记录复杂的类型,根本不需要编写助手!

只需console.log(foo, bar)就可以了。如果您想在输出中输入变量名,请console.log({foo: foo, bar: bar})

替代答案:

你可能会考虑一个只需要一个对象并将其吐出的帮助器 - 它不会节省太多,如果有的话,输入;但结果是更可读的代码与记录的输出非常匹配。

window.logValues = function(values) {
  var k, v;
  var pairs = [];

  for (k in values) {
    v = values[k];
    pairs.push("" + k + ": " + v);
  }

  console.log(pairs.join(", "));
};

然后将其称为:

logValues({foo: 1, bar: "asdf"})

您看到了:

foo: 1, bar: asdf

选项#3:

或者是一个更简洁的例子,可能会删除比你想要的更多的类型信息:

window.logValues = function(values) {
  console.log(JSON.stringify(values));
}

答案 2 :(得分:0)

function logValue(foo)
{
    console.log(foo + ": " + eval(foo));
}

var foo = "something";
logValue("foo");

这样可行,但你必须确保你的foo变量在logValue函数中可用。

答案 3 :(得分:0)

我使用两个数组来存储所有数据:

data=[];
names=[];
foo=1;
data[1]="foovalue"; 
names[1]="foo";

bar=2;
data[bar]=28;
names[bar]="bar";

etcetera,我在项目中使用的所有全局值 接下来,您可以编写像

这样的代码
data[foo]=data[foo] + data[bar];
data[bar]=data[bar]+22;

function log(a,b){
//something like
var=text;
text=names[a] + " = " + data[a];
text=text + linebreak + names[b] + " = " + data[b];
}

你也可以用它来写html;

function writedataval(arrnumber){
  document.getElementById(names[arrnumber] ).innerHTML =  data[arrnumber] ;
}

writedataval(foo);

必须有一个id =" foo"在您成功运行此代码之前

我认为这种方法在许多方面都非常有用,因为您还可以使用数组索引来访问数据和名称。