Use dynamic variable names in JavaScript

Use dynamic variable names in JavaScript

In PHP you can do amazing/horrendous things like this:
$a = 1;
$b = 2;
$c = 3;
$name = ‘a’;
echo $$name;
// prints 1

Is there any way of doing something like this with Javascript?
E.g. if I have a var name = ‘the name of the variable’; can I get a reference to the variable with name name?

Solutions/Answers:

Solution 1:

Since ECMA-/Javascript is all about Objects and Contexts (which, are also somekind of Object), every variable is stored in a such called Variable- (or in case of a Function, Activation Object).

So if you create variables like this:

var a = 1,
    b = 2,
    c = 3;

In the Global scope (= NO function context), you implicitly write those variables into the Global object (= window in a browser).

Those can get accessed by using the “dot” or “bracket” notation:

var name = window.a;

or

var name = window['a'];

This only works for the global object in this particular instance, because the Variable Object of the Global Object is the window object itself. Within the Context of a function, you don’t have direct access to the Activation Object. For instance:

function foobar() {
   this.a = 1;
   this.b = 2;

   var name = window['a']; // === undefined
   alert(name);
   name = this['a']; // === 1
   alert(name);
}

new foobar();

new creates a new instance of a self-defined object (context). Without new the scope of the function would be also global (=window). This example would alert undefined and 1 respectively. If we would replace this.a = 1; this.b = 2 with:

var a = 1,
    b = 2;

Both alert outputs would be undefined. In that scenario, the variables a and b would get stored in the Activation Object from foobar, which we cannot access (of course we could access those directly by calling a and b).

Solution 2:

eval is one option.

var a = 1;
var name = 'a';

document.write(eval(name)); // 1

Solution 3:

You can use the window object to get at it .

window['myVar']

window has a reference to all global variables and global functions you are using.

Solution 4:

Just don’t know what a bad answer gets so many votes. It’s quite easy answer but you make it complex.

// If you want to get article_count
// var article_count = 1000;
var type = 'article';
this[type+'_count'] = 1000;  // in a function we use "this";
alert(article_count);

Solution 5:

a = 'varname';
str = a+' = '+'123';
eval(str)
alert(varname);

Try this…

Solution 6:

This is an example :

for(var i=0; i<=3; i++) {
    window['p'+i] = "hello " + i;
}

alert(p0); // hello 0
alert(p1); // hello 1
alert(p2); // hello 2
alert(p3); // hello 3

Another example :

var myVariable = 'coco';
window[myVariable] = 'riko';

alert(coco); // display : riko

So, the value “coco” of myVariable becomes a variable coco.

Because all the variables in the global scope are properties of the Window object.