显示一个JavaScript变量的名称而不是其值

14

是否可以打印/显示 JavaScript 变量的名称?例如:

var foo=5;
var bar=6;
var foobar=foo+bar;

document.write(foo+ "<br>");
document.write(bar+ "<br>");
document.write(foobar + "<br>");
我们如何打印变量名,使输出为:
变量名1: 值1
变量名2: 值2
foo 
bar 
foobar

不是:

5
6
11

2
这是一个典型的XY问题。你为什么想要做这个? - elclanrs
1
这是一个使用案例:在测试期间,我想检查我认为来自模块的每个变量是否都存在。如果 typeof var === undefined,我希望能够在屏幕上显示“var未定义”。对我来说不是XY问题。 - BaldEagle
类似这篇文章的其他帖子都被标记为 https://dev59.com/qnA75IYBdhLWcg3wPmZ8 的副本。所有这些讨论的简短总结:可以将变量名的字符串和变量一起传递给函数。对于其他人,有一种方法可以获取全局变量(那些具有 window.x 的变量)。对于其他人,可以将每个变量都变成一个对象。然后,可以使用对象键来获取变量名。对于疯狂的人,可以编写代码来解析程序并以此获取变量(祝你好运!)对我而言:第一个方法。 - BaldEagle
3个回答

4
你可以将变量放在object中,然后通过这种方式轻松打印它们:http://jsfiddle.net/5MVde/7/ 查看fiddle以获取所有内容,这是JavaScript...
var x = {
    foo: 5,
    bar: 6,
    foobar: function (){
        var that=this;
        return that.foo+that.bar
    }
};

var myDiv = document.getElementById("results");

myDiv.innerHTML='Variable Names...';
for(var variable in x)
{
    //alert(variable);
    myDiv.innerHTML+='<br>'+variable;
}

myDiv.innerHTML+='<br><br>And their values...';
myDiv.innerHTML+='<br>'+x.foo+'<br>'+x.bar+'<br>'+x.foobar();

JavaScript的for...in语句循环遍历一个对象的属性。
如果您不想foobar是一个函数,则可以使用另一种变体(感谢@elclanrs):http://jsfiddle.net/fQ5hE/2/

1
你忘了加上 var,而且 thiswindow。这样是行不通的。 - elclanrs
你的演示表明for..in是可以工作的,但答案是有误的。尝试输出x.foobar,结果将会是NaN - elclanrs
@elclanrs,谢谢。已更新答案。@RalphDavidAbernathy可以阅读此https://dev59.com/1nVC5IYBdhLWcg3w9GLM#134149并决定如何处理foobar方法。 - gfrobenius
2
看起来好多了,但现在它是一个函数。执行以下操作 var x={foo:5,bar:6}; x.foobar=x.foo+x.bar;。此外,您仍然缺少一些变量 var myDivfor(var variable in x)。然后,myDiv.innerHTML=myDiv.innerHTML 可以写成 myDiv.innerHTML+= - elclanrs

2
Utils = {
    eventRegister_globalVariable : function(variableName,handlers){
        eventRegister_JsonVariable(this,variableName,handlers);
    },
    eventRegister_jsonVariable : function(jsonObj,variableName,handlers){
        if(jsonObj.eventRegisteredVariable === undefined) {
            jsonObj.eventRegisteredVariable={};//this Object is used for trigger event in javascript variable value changes ku
        }
        Object.defineProperty(jsonObj, variableName , {
                    get: function() { 
                        return jsonObj.eventRegisteredVariable[variableName] },
                    set: function(value) {
                        jsonObj.eventRegisteredVariable[variableName] = value; handlers(jsonObj.eventRegisteredVariable[variableName]);}
                    });
            }

2
你能详细说明一下这个答案或者描述一个使用案例和结果吗? - Ian Delairre

0
另一个可能的解决方案是 "Object.keys(this)",这将在数组中返回所有变量名。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接