1

调试时,我经常写类似的东西,console.log("foo:"+foo+", bar:"+bar)是否可以编写一个logValues(foo,bar)给出相同输出的函数?本质上,我在问是否有办法从一个变量转到该变量的名称。我是否必须仅使用产生的索引来设置参数数组的循环 [0]: 'value of foo, [1]: 'value of bar'

谢谢阅读

4

4 回答 4

3

试试这个代码:

var logValues = function(){
    var args = arguments;
    for(var i in args)
        window.console.log(args[i] + ": " + eval(args[i]));
}
logValues("foo","bar");
于 2012-05-09T00:10:49.253 回答
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));
}
于 2012-05-09T00:18:56.567 回答
0
function logValue(foo)
{
    console.log(foo + ": " + eval(foo));
}

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

这将起作用,但您必须确保您的 foo 变量在 logValue 函数中可用。

于 2012-05-09T00:16:01.253 回答
0

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

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

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

等等,我在项目中使用的所有全局值接下来你可以编写如下代码

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" 的标签才能成功运行此代码

我认为这种方法在很多方面都非常有益,因为您还可以使用数组索引来访问 data 和 name 。

于 2014-07-22T23:20:25.027 回答