14

Is it possible to print / display a JavaScript variable's name? For example:

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

document.write(foo+ "<br>");
document.write(bar+ "<br>");
document.write(foobar + "<br>");

How would we print the variable's names so the output would be:

foo 
bar 
foobar

Rather than:

5
6
11
3
  • 2
    This is a typical XY problem. Why do you want to do this? Commented Mar 21, 2014 at 2:09
  • 1
    Here's a use case: During testing, I want to check that every variable I think is coming from a module is coming. If typeof var === undefined, I'd like to be able to put on the screen "var is undefined". Not an XY question for me. Commented Oct 11, 2016 at 13:05
  • Other posts like this one are marked as duplicates of stackoverflow.com/questions/3404057/…. Short summary of the discussion in all of them: One could pass the function both a string of the variable name and the variable. For others, there's a way for global variables (those with window.x). For others, one could make every variable an object. Then, one can use object keys to get the variable name. For the insane, one could write code to parse the program and get the variable that way (good luck!) For me: That first one. Commented Oct 11, 2016 at 13:28

3 Answers 3

4

You can put the variables in an object then easily print them this way: http://jsfiddle.net/5MVde/7/

See fiddle for everything, this is the 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();

The JavaScript for...in statement loops through the properties of an object.

Another variation (thanks @elclanrs) if you don't want foobar to be a function: http://jsfiddle.net/fQ5hE/2/

Sign up to request clarification or add additional context in comments.

4 Comments

You forgot var, and this is window. Won't work.
Your demo shows that the for..in works, but the answer is flawed. Try printing x.foobar and you'll get NaN.
@elclanrs, thanks. Updated answer. @RalphDavidAbernathy can read this stackoverflow.com/a/134149/3112803 and decide how he wants to handle the foobar method.
That looks a bit better, but now it's a function. Do this var x={foo:5,bar:6}; x.foobar=x.foo+x.bar;. Also you're still missing a couple vars var myDiv and for(var variable in x). Then myDiv.innerHTML=myDiv.innerHTML you can write as myDiv.innerHTML+=
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]);}
                    });
            }

1 Comment

could you elaborate on this answer or describe a use case and the result?
0

Another possible solution can be "Object.keys(this)".... This will give you all the variable names in an array.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.