调试时,我经常写类似的东西,console.log("foo:"+foo+", bar:"+bar)
是否可以编写一个logValues(foo,bar)
给出相同输出的函数?本质上,我在问是否有办法从一个变量转到该变量的名称。我是否必须仅使用产生的索引来设置参数数组的循环 [0]: 'value of foo, [1]: 'value of bar'
谢谢阅读
调试时,我经常写类似的东西,console.log("foo:"+foo+", bar:"+bar)
是否可以编写一个logValues(foo,bar)
给出相同输出的函数?本质上,我在问是否有办法从一个变量转到该变量的名称。我是否必须仅使用产生的索引来设置参数数组的循环 [0]: 'value of foo, [1]: 'value of bar'
谢谢阅读
试试这个代码:
var logValues = function(){
var args = arguments;
for(var i in args)
window.console.log(args[i] + ": " + eval(args[i]));
}
logValues("foo","bar");
(这些选项都没有直接回答这个问题;但应该为您尝试做的事情提供更好的选择)
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));
}
function logValue(foo)
{
console.log(foo + ": " + eval(foo));
}
var foo = "something";
logValue("foo");
这将起作用,但您必须确保您的 foo 变量在 logValue 函数中可用。
我使用两个数组将所有数据存储在:
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 。