“Variable” variables in Javascript?












87














I know it's possible in PHP to have "variable" variables. For example



$x = "variable";
$$x = "hello, world!";
echo $variable; // displays "hello, world!"


Is this possible in javascript? How would it be done?










share|improve this question
























  • arrays are not variables, if you use an array as a function argument , the JS interpreter will use a pointer to your array. In programming the use of certain terms is precise, and what you ask for has only very little meaning
    – MrJ
    Dec 6 at 0:32


















87














I know it's possible in PHP to have "variable" variables. For example



$x = "variable";
$$x = "hello, world!";
echo $variable; // displays "hello, world!"


Is this possible in javascript? How would it be done?










share|improve this question
























  • arrays are not variables, if you use an array as a function argument , the JS interpreter will use a pointer to your array. In programming the use of certain terms is precise, and what you ask for has only very little meaning
    – MrJ
    Dec 6 at 0:32
















87












87








87


21





I know it's possible in PHP to have "variable" variables. For example



$x = "variable";
$$x = "hello, world!";
echo $variable; // displays "hello, world!"


Is this possible in javascript? How would it be done?










share|improve this question















I know it's possible in PHP to have "variable" variables. For example



$x = "variable";
$$x = "hello, world!";
echo $variable; // displays "hello, world!"


Is this possible in javascript? How would it be done?







javascript variables variable-variables






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Dec 29 '14 at 3:56









senshin

7,42753147




7,42753147










asked Mar 3 '11 at 22:40









ShoeLace1291

1,60873054




1,60873054












  • arrays are not variables, if you use an array as a function argument , the JS interpreter will use a pointer to your array. In programming the use of certain terms is precise, and what you ask for has only very little meaning
    – MrJ
    Dec 6 at 0:32




















  • arrays are not variables, if you use an array as a function argument , the JS interpreter will use a pointer to your array. In programming the use of certain terms is precise, and what you ask for has only very little meaning
    – MrJ
    Dec 6 at 0:32


















arrays are not variables, if you use an array as a function argument , the JS interpreter will use a pointer to your array. In programming the use of certain terms is precise, and what you ask for has only very little meaning
– MrJ
Dec 6 at 0:32






arrays are not variables, if you use an array as a function argument , the JS interpreter will use a pointer to your array. In programming the use of certain terms is precise, and what you ask for has only very little meaning
– MrJ
Dec 6 at 0:32














7 Answers
7






active

oldest

votes


















116














There is no single solution for this (well, there is eval, but lets not seriously consider that). It is possible to access some global variables dynamically via window, but that doesn't work for variables local to a function. Global variables that do not become a property of window are variables defined with let and const, and classes.



There is almost always a better solution than using variable variables! Instead you should be looking at data structures and choose the right one for your problem.



If you have a fixed set of names, such as






// BAD
var foo = 42;
var bar = 21;

var key = 'foo';
console.log(eval(key));





store the those name/values as properties of an object and use bracket notation to look them up dynamically:






// GOOD
var obj = {
foo: 42,
bar: 21,
};

var key = 'foo';
console.log(obj[key]);





In ES2015+ it's even easier to do this for existing variables using concise property notation:






// GOOD
var foo = 42;
var bar = 21;
var obj = {foo, bar};

var key = 'foo';
console.log(obj[key]);







If you have "consecutively" numbered variables, such as






// BAD
var foo1 = 'foo';
var foo2 = 'bar';
var foo3 = 'baz';

var index = 1;
console.log(eval('foo' + index));





then you should be using an array instead and simply use the index to access the corresponding value:






// GOOD
var foos = ['foo', 'bar', 'baz'];
var index = 1;
console.log(foos[index - 1]);








share|improve this answer































    40














    If you are desperate to do this you can either try using eval():



    var data = "testVariable";
    eval("var temp_" + data + "=123;");
    alert(temp_testVariable);


    Or using the window object:



    var data = "testVariable";
    window["temp_" + data] = 123;
    alert(window["temp_" + data]);


    http://www.hiteshagrawal.com/javascript/dynamic-variables-in-javascript






    share|improve this answer

















    • 13




      +1 for the window solution
      – DanMan
      May 14 '13 at 13:53










    • eval can't create local variables in strict mode. An indirect call can create global variables, though.
      – Oriol
      Nov 27 '16 at 22:41



















    3














    To reference a variable in javascript with only a string, you can use



    window['your_variable_name']


    You can set and reference variables, and objects in variables too.






    share|improve this answer





























      1














      Of course you can, but don't. The variables have to be global.



      var killingFunction = 'alert'
      var killMeNow = 'please'
      var please = 'You have been killed!'
      this[killingFunction](this[killMeNow])





      share|improve this answer





























        1














        var vars = {};
        var var_name = "str";
        vars[var_name] = "working";
        console.log(vars["str"]);





        share|improve this answer





























          1














          You can use the JavaScript eval(str) function.



          What this function does is convert the string provided into JS code, then executes it.



          For example:



          eval("console.log('hello world')"); // Logs hello world


          So to use it as a variable variable, you can do the following:



          var a = "hello";
          var hello = "world";
          console.log(a + " " + eval(a)); // Logs hello world


          This will produce the exact same output as:



          console.log(a + " " + hello); // Logs hello world


          (Example is taken from the PHP manual on variable variables.)






          share|improve this answer





























            1














            Unlike PHP, JavaScript doesn't offer access to the globals array (which contains references to all the variable names currently declared). As such, JavaScript does not offer native support for variable variables. You can, however, emulate this feature as long as you define all your variables as part of an array or an object. This will in turn create a gloabls array for you. For example, instead of declaring the variable hello in the global scope like this:



            var hello = 'hello world';


            let's encapsulate it inside an object. We'll call that object vv (variable variables):



            var vv = {
            'hello': 'hello world',
            //Other variable variables come here.
            },
            referToHello = 'hello';


            Now we can refer to the variable by it's index, and since array indexes can be provided using a variable we are de facto making use of a variable variable:



            console.log(vv[referToHello]); //Output: hello world


            The Answer To Your Question



            Let's apply this to the code you supplied in the original question:



                var vv = {
            'x': 'variable',
            'variable': 'hello world!'
            };
            console.log(vv[vv['x']]); //Displays "hello, world!"


            A Practical Use



            While the previous code might appear ridiculously cumbersome and impractical, there are practical uses for variable variables in JavaScript using this type of encapsulation. In the example below we use the same concept to get the ID of an undefined number of HTML elements.



            var elementIds = ,
            elements = ['message','fillOrStroke','sizePicker','colorPicker']; //The items in this array could be defined automatically via an input, database query, event, etc.
            elements.forEach( (element) => {
            elementIds[element] = document.getElementById(element);
            });


            This example declares variable variables (keys in elementIds) based on the ID of each element, and will assign the node of said element as the value of each variable. And since using global variables in JavaScript is generally discouraged giving your variable variables a unique scope (in this instance, declaring them inside the elementIds array) is not only neat, but also more responsible.






            share|improve this answer




















              protected by Samuel Liew Nov 29 '16 at 3:26



              Thank you for your interest in this question.
              Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).



              Would you like to answer one of these unanswered questions instead?














              7 Answers
              7






              active

              oldest

              votes








              7 Answers
              7






              active

              oldest

              votes









              active

              oldest

              votes






              active

              oldest

              votes









              116














              There is no single solution for this (well, there is eval, but lets not seriously consider that). It is possible to access some global variables dynamically via window, but that doesn't work for variables local to a function. Global variables that do not become a property of window are variables defined with let and const, and classes.



              There is almost always a better solution than using variable variables! Instead you should be looking at data structures and choose the right one for your problem.



              If you have a fixed set of names, such as






              // BAD
              var foo = 42;
              var bar = 21;

              var key = 'foo';
              console.log(eval(key));





              store the those name/values as properties of an object and use bracket notation to look them up dynamically:






              // GOOD
              var obj = {
              foo: 42,
              bar: 21,
              };

              var key = 'foo';
              console.log(obj[key]);





              In ES2015+ it's even easier to do this for existing variables using concise property notation:






              // GOOD
              var foo = 42;
              var bar = 21;
              var obj = {foo, bar};

              var key = 'foo';
              console.log(obj[key]);







              If you have "consecutively" numbered variables, such as






              // BAD
              var foo1 = 'foo';
              var foo2 = 'bar';
              var foo3 = 'baz';

              var index = 1;
              console.log(eval('foo' + index));





              then you should be using an array instead and simply use the index to access the corresponding value:






              // GOOD
              var foos = ['foo', 'bar', 'baz'];
              var index = 1;
              console.log(foos[index - 1]);








              share|improve this answer




























                116














                There is no single solution for this (well, there is eval, but lets not seriously consider that). It is possible to access some global variables dynamically via window, but that doesn't work for variables local to a function. Global variables that do not become a property of window are variables defined with let and const, and classes.



                There is almost always a better solution than using variable variables! Instead you should be looking at data structures and choose the right one for your problem.



                If you have a fixed set of names, such as






                // BAD
                var foo = 42;
                var bar = 21;

                var key = 'foo';
                console.log(eval(key));





                store the those name/values as properties of an object and use bracket notation to look them up dynamically:






                // GOOD
                var obj = {
                foo: 42,
                bar: 21,
                };

                var key = 'foo';
                console.log(obj[key]);





                In ES2015+ it's even easier to do this for existing variables using concise property notation:






                // GOOD
                var foo = 42;
                var bar = 21;
                var obj = {foo, bar};

                var key = 'foo';
                console.log(obj[key]);







                If you have "consecutively" numbered variables, such as






                // BAD
                var foo1 = 'foo';
                var foo2 = 'bar';
                var foo3 = 'baz';

                var index = 1;
                console.log(eval('foo' + index));





                then you should be using an array instead and simply use the index to access the corresponding value:






                // GOOD
                var foos = ['foo', 'bar', 'baz'];
                var index = 1;
                console.log(foos[index - 1]);








                share|improve this answer


























                  116












                  116








                  116






                  There is no single solution for this (well, there is eval, but lets not seriously consider that). It is possible to access some global variables dynamically via window, but that doesn't work for variables local to a function. Global variables that do not become a property of window are variables defined with let and const, and classes.



                  There is almost always a better solution than using variable variables! Instead you should be looking at data structures and choose the right one for your problem.



                  If you have a fixed set of names, such as






                  // BAD
                  var foo = 42;
                  var bar = 21;

                  var key = 'foo';
                  console.log(eval(key));





                  store the those name/values as properties of an object and use bracket notation to look them up dynamically:






                  // GOOD
                  var obj = {
                  foo: 42,
                  bar: 21,
                  };

                  var key = 'foo';
                  console.log(obj[key]);





                  In ES2015+ it's even easier to do this for existing variables using concise property notation:






                  // GOOD
                  var foo = 42;
                  var bar = 21;
                  var obj = {foo, bar};

                  var key = 'foo';
                  console.log(obj[key]);







                  If you have "consecutively" numbered variables, such as






                  // BAD
                  var foo1 = 'foo';
                  var foo2 = 'bar';
                  var foo3 = 'baz';

                  var index = 1;
                  console.log(eval('foo' + index));





                  then you should be using an array instead and simply use the index to access the corresponding value:






                  // GOOD
                  var foos = ['foo', 'bar', 'baz'];
                  var index = 1;
                  console.log(foos[index - 1]);








                  share|improve this answer














                  There is no single solution for this (well, there is eval, but lets not seriously consider that). It is possible to access some global variables dynamically via window, but that doesn't work for variables local to a function. Global variables that do not become a property of window are variables defined with let and const, and classes.



                  There is almost always a better solution than using variable variables! Instead you should be looking at data structures and choose the right one for your problem.



                  If you have a fixed set of names, such as






                  // BAD
                  var foo = 42;
                  var bar = 21;

                  var key = 'foo';
                  console.log(eval(key));





                  store the those name/values as properties of an object and use bracket notation to look them up dynamically:






                  // GOOD
                  var obj = {
                  foo: 42,
                  bar: 21,
                  };

                  var key = 'foo';
                  console.log(obj[key]);





                  In ES2015+ it's even easier to do this for existing variables using concise property notation:






                  // GOOD
                  var foo = 42;
                  var bar = 21;
                  var obj = {foo, bar};

                  var key = 'foo';
                  console.log(obj[key]);







                  If you have "consecutively" numbered variables, such as






                  // BAD
                  var foo1 = 'foo';
                  var foo2 = 'bar';
                  var foo3 = 'baz';

                  var index = 1;
                  console.log(eval('foo' + index));





                  then you should be using an array instead and simply use the index to access the corresponding value:






                  // GOOD
                  var foos = ['foo', 'bar', 'baz'];
                  var index = 1;
                  console.log(foos[index - 1]);








                  // BAD
                  var foo = 42;
                  var bar = 21;

                  var key = 'foo';
                  console.log(eval(key));





                  // BAD
                  var foo = 42;
                  var bar = 21;

                  var key = 'foo';
                  console.log(eval(key));





                  // GOOD
                  var obj = {
                  foo: 42,
                  bar: 21,
                  };

                  var key = 'foo';
                  console.log(obj[key]);





                  // GOOD
                  var obj = {
                  foo: 42,
                  bar: 21,
                  };

                  var key = 'foo';
                  console.log(obj[key]);





                  // GOOD
                  var foo = 42;
                  var bar = 21;
                  var obj = {foo, bar};

                  var key = 'foo';
                  console.log(obj[key]);





                  // GOOD
                  var foo = 42;
                  var bar = 21;
                  var obj = {foo, bar};

                  var key = 'foo';
                  console.log(obj[key]);





                  // BAD
                  var foo1 = 'foo';
                  var foo2 = 'bar';
                  var foo3 = 'baz';

                  var index = 1;
                  console.log(eval('foo' + index));





                  // BAD
                  var foo1 = 'foo';
                  var foo2 = 'bar';
                  var foo3 = 'baz';

                  var index = 1;
                  console.log(eval('foo' + index));





                  // GOOD
                  var foos = ['foo', 'bar', 'baz'];
                  var index = 1;
                  console.log(foos[index - 1]);





                  // GOOD
                  var foos = ['foo', 'bar', 'baz'];
                  var index = 1;
                  console.log(foos[index - 1]);






                  share|improve this answer














                  share|improve this answer



                  share|improve this answer








                  edited Nov 8 at 23:47

























                  answered Mar 3 '11 at 22:56









                  Felix Kling

                  544k125847902




                  544k125847902

























                      40














                      If you are desperate to do this you can either try using eval():



                      var data = "testVariable";
                      eval("var temp_" + data + "=123;");
                      alert(temp_testVariable);


                      Or using the window object:



                      var data = "testVariable";
                      window["temp_" + data] = 123;
                      alert(window["temp_" + data]);


                      http://www.hiteshagrawal.com/javascript/dynamic-variables-in-javascript






                      share|improve this answer

















                      • 13




                        +1 for the window solution
                        – DanMan
                        May 14 '13 at 13:53










                      • eval can't create local variables in strict mode. An indirect call can create global variables, though.
                        – Oriol
                        Nov 27 '16 at 22:41
















                      40














                      If you are desperate to do this you can either try using eval():



                      var data = "testVariable";
                      eval("var temp_" + data + "=123;");
                      alert(temp_testVariable);


                      Or using the window object:



                      var data = "testVariable";
                      window["temp_" + data] = 123;
                      alert(window["temp_" + data]);


                      http://www.hiteshagrawal.com/javascript/dynamic-variables-in-javascript






                      share|improve this answer

















                      • 13




                        +1 for the window solution
                        – DanMan
                        May 14 '13 at 13:53










                      • eval can't create local variables in strict mode. An indirect call can create global variables, though.
                        – Oriol
                        Nov 27 '16 at 22:41














                      40












                      40








                      40






                      If you are desperate to do this you can either try using eval():



                      var data = "testVariable";
                      eval("var temp_" + data + "=123;");
                      alert(temp_testVariable);


                      Or using the window object:



                      var data = "testVariable";
                      window["temp_" + data] = 123;
                      alert(window["temp_" + data]);


                      http://www.hiteshagrawal.com/javascript/dynamic-variables-in-javascript






                      share|improve this answer












                      If you are desperate to do this you can either try using eval():



                      var data = "testVariable";
                      eval("var temp_" + data + "=123;");
                      alert(temp_testVariable);


                      Or using the window object:



                      var data = "testVariable";
                      window["temp_" + data] = 123;
                      alert(window["temp_" + data]);


                      http://www.hiteshagrawal.com/javascript/dynamic-variables-in-javascript







                      share|improve this answer












                      share|improve this answer



                      share|improve this answer










                      answered Mar 3 '11 at 22:51









                      Masterbuddha

                      57439




                      57439








                      • 13




                        +1 for the window solution
                        – DanMan
                        May 14 '13 at 13:53










                      • eval can't create local variables in strict mode. An indirect call can create global variables, though.
                        – Oriol
                        Nov 27 '16 at 22:41














                      • 13




                        +1 for the window solution
                        – DanMan
                        May 14 '13 at 13:53










                      • eval can't create local variables in strict mode. An indirect call can create global variables, though.
                        – Oriol
                        Nov 27 '16 at 22:41








                      13




                      13




                      +1 for the window solution
                      – DanMan
                      May 14 '13 at 13:53




                      +1 for the window solution
                      – DanMan
                      May 14 '13 at 13:53












                      eval can't create local variables in strict mode. An indirect call can create global variables, though.
                      – Oriol
                      Nov 27 '16 at 22:41




                      eval can't create local variables in strict mode. An indirect call can create global variables, though.
                      – Oriol
                      Nov 27 '16 at 22:41











                      3














                      To reference a variable in javascript with only a string, you can use



                      window['your_variable_name']


                      You can set and reference variables, and objects in variables too.






                      share|improve this answer


























                        3














                        To reference a variable in javascript with only a string, you can use



                        window['your_variable_name']


                        You can set and reference variables, and objects in variables too.






                        share|improve this answer
























                          3












                          3








                          3






                          To reference a variable in javascript with only a string, you can use



                          window['your_variable_name']


                          You can set and reference variables, and objects in variables too.






                          share|improve this answer












                          To reference a variable in javascript with only a string, you can use



                          window['your_variable_name']


                          You can set and reference variables, and objects in variables too.







                          share|improve this answer












                          share|improve this answer



                          share|improve this answer










                          answered Nov 9 '14 at 0:50









                          Awesomeness01

                          1,4301811




                          1,4301811























                              1














                              Of course you can, but don't. The variables have to be global.



                              var killingFunction = 'alert'
                              var killMeNow = 'please'
                              var please = 'You have been killed!'
                              this[killingFunction](this[killMeNow])





                              share|improve this answer


























                                1














                                Of course you can, but don't. The variables have to be global.



                                var killingFunction = 'alert'
                                var killMeNow = 'please'
                                var please = 'You have been killed!'
                                this[killingFunction](this[killMeNow])





                                share|improve this answer
























                                  1












                                  1








                                  1






                                  Of course you can, but don't. The variables have to be global.



                                  var killingFunction = 'alert'
                                  var killMeNow = 'please'
                                  var please = 'You have been killed!'
                                  this[killingFunction](this[killMeNow])





                                  share|improve this answer












                                  Of course you can, but don't. The variables have to be global.



                                  var killingFunction = 'alert'
                                  var killMeNow = 'please'
                                  var please = 'You have been killed!'
                                  this[killingFunction](this[killMeNow])






                                  share|improve this answer












                                  share|improve this answer



                                  share|improve this answer










                                  answered Oct 13 '12 at 18:07









                                  Konrad Borowski

                                  7,11323860




                                  7,11323860























                                      1














                                      var vars = {};
                                      var var_name = "str";
                                      vars[var_name] = "working";
                                      console.log(vars["str"]);





                                      share|improve this answer


























                                        1














                                        var vars = {};
                                        var var_name = "str";
                                        vars[var_name] = "working";
                                        console.log(vars["str"]);





                                        share|improve this answer
























                                          1












                                          1








                                          1






                                          var vars = {};
                                          var var_name = "str";
                                          vars[var_name] = "working";
                                          console.log(vars["str"]);





                                          share|improve this answer












                                          var vars = {};
                                          var var_name = "str";
                                          vars[var_name] = "working";
                                          console.log(vars["str"]);






                                          share|improve this answer












                                          share|improve this answer



                                          share|improve this answer










                                          answered Mar 10 '14 at 13:05









                                          lkdhruw

                                          3531215




                                          3531215























                                              1














                                              You can use the JavaScript eval(str) function.



                                              What this function does is convert the string provided into JS code, then executes it.



                                              For example:



                                              eval("console.log('hello world')"); // Logs hello world


                                              So to use it as a variable variable, you can do the following:



                                              var a = "hello";
                                              var hello = "world";
                                              console.log(a + " " + eval(a)); // Logs hello world


                                              This will produce the exact same output as:



                                              console.log(a + " " + hello); // Logs hello world


                                              (Example is taken from the PHP manual on variable variables.)






                                              share|improve this answer


























                                                1














                                                You can use the JavaScript eval(str) function.



                                                What this function does is convert the string provided into JS code, then executes it.



                                                For example:



                                                eval("console.log('hello world')"); // Logs hello world


                                                So to use it as a variable variable, you can do the following:



                                                var a = "hello";
                                                var hello = "world";
                                                console.log(a + " " + eval(a)); // Logs hello world


                                                This will produce the exact same output as:



                                                console.log(a + " " + hello); // Logs hello world


                                                (Example is taken from the PHP manual on variable variables.)






                                                share|improve this answer
























                                                  1












                                                  1








                                                  1






                                                  You can use the JavaScript eval(str) function.



                                                  What this function does is convert the string provided into JS code, then executes it.



                                                  For example:



                                                  eval("console.log('hello world')"); // Logs hello world


                                                  So to use it as a variable variable, you can do the following:



                                                  var a = "hello";
                                                  var hello = "world";
                                                  console.log(a + " " + eval(a)); // Logs hello world


                                                  This will produce the exact same output as:



                                                  console.log(a + " " + hello); // Logs hello world


                                                  (Example is taken from the PHP manual on variable variables.)






                                                  share|improve this answer












                                                  You can use the JavaScript eval(str) function.



                                                  What this function does is convert the string provided into JS code, then executes it.



                                                  For example:



                                                  eval("console.log('hello world')"); // Logs hello world


                                                  So to use it as a variable variable, you can do the following:



                                                  var a = "hello";
                                                  var hello = "world";
                                                  console.log(a + " " + eval(a)); // Logs hello world


                                                  This will produce the exact same output as:



                                                  console.log(a + " " + hello); // Logs hello world


                                                  (Example is taken from the PHP manual on variable variables.)







                                                  share|improve this answer












                                                  share|improve this answer



                                                  share|improve this answer










                                                  answered Jul 12 '17 at 21:55









                                                  Abraham Murciano Benzadon

                                                  495212




                                                  495212























                                                      1














                                                      Unlike PHP, JavaScript doesn't offer access to the globals array (which contains references to all the variable names currently declared). As such, JavaScript does not offer native support for variable variables. You can, however, emulate this feature as long as you define all your variables as part of an array or an object. This will in turn create a gloabls array for you. For example, instead of declaring the variable hello in the global scope like this:



                                                      var hello = 'hello world';


                                                      let's encapsulate it inside an object. We'll call that object vv (variable variables):



                                                      var vv = {
                                                      'hello': 'hello world',
                                                      //Other variable variables come here.
                                                      },
                                                      referToHello = 'hello';


                                                      Now we can refer to the variable by it's index, and since array indexes can be provided using a variable we are de facto making use of a variable variable:



                                                      console.log(vv[referToHello]); //Output: hello world


                                                      The Answer To Your Question



                                                      Let's apply this to the code you supplied in the original question:



                                                          var vv = {
                                                      'x': 'variable',
                                                      'variable': 'hello world!'
                                                      };
                                                      console.log(vv[vv['x']]); //Displays "hello, world!"


                                                      A Practical Use



                                                      While the previous code might appear ridiculously cumbersome and impractical, there are practical uses for variable variables in JavaScript using this type of encapsulation. In the example below we use the same concept to get the ID of an undefined number of HTML elements.



                                                      var elementIds = ,
                                                      elements = ['message','fillOrStroke','sizePicker','colorPicker']; //The items in this array could be defined automatically via an input, database query, event, etc.
                                                      elements.forEach( (element) => {
                                                      elementIds[element] = document.getElementById(element);
                                                      });


                                                      This example declares variable variables (keys in elementIds) based on the ID of each element, and will assign the node of said element as the value of each variable. And since using global variables in JavaScript is generally discouraged giving your variable variables a unique scope (in this instance, declaring them inside the elementIds array) is not only neat, but also more responsible.






                                                      share|improve this answer


























                                                        1














                                                        Unlike PHP, JavaScript doesn't offer access to the globals array (which contains references to all the variable names currently declared). As such, JavaScript does not offer native support for variable variables. You can, however, emulate this feature as long as you define all your variables as part of an array or an object. This will in turn create a gloabls array for you. For example, instead of declaring the variable hello in the global scope like this:



                                                        var hello = 'hello world';


                                                        let's encapsulate it inside an object. We'll call that object vv (variable variables):



                                                        var vv = {
                                                        'hello': 'hello world',
                                                        //Other variable variables come here.
                                                        },
                                                        referToHello = 'hello';


                                                        Now we can refer to the variable by it's index, and since array indexes can be provided using a variable we are de facto making use of a variable variable:



                                                        console.log(vv[referToHello]); //Output: hello world


                                                        The Answer To Your Question



                                                        Let's apply this to the code you supplied in the original question:



                                                            var vv = {
                                                        'x': 'variable',
                                                        'variable': 'hello world!'
                                                        };
                                                        console.log(vv[vv['x']]); //Displays "hello, world!"


                                                        A Practical Use



                                                        While the previous code might appear ridiculously cumbersome and impractical, there are practical uses for variable variables in JavaScript using this type of encapsulation. In the example below we use the same concept to get the ID of an undefined number of HTML elements.



                                                        var elementIds = ,
                                                        elements = ['message','fillOrStroke','sizePicker','colorPicker']; //The items in this array could be defined automatically via an input, database query, event, etc.
                                                        elements.forEach( (element) => {
                                                        elementIds[element] = document.getElementById(element);
                                                        });


                                                        This example declares variable variables (keys in elementIds) based on the ID of each element, and will assign the node of said element as the value of each variable. And since using global variables in JavaScript is generally discouraged giving your variable variables a unique scope (in this instance, declaring them inside the elementIds array) is not only neat, but also more responsible.






                                                        share|improve this answer
























                                                          1












                                                          1








                                                          1






                                                          Unlike PHP, JavaScript doesn't offer access to the globals array (which contains references to all the variable names currently declared). As such, JavaScript does not offer native support for variable variables. You can, however, emulate this feature as long as you define all your variables as part of an array or an object. This will in turn create a gloabls array for you. For example, instead of declaring the variable hello in the global scope like this:



                                                          var hello = 'hello world';


                                                          let's encapsulate it inside an object. We'll call that object vv (variable variables):



                                                          var vv = {
                                                          'hello': 'hello world',
                                                          //Other variable variables come here.
                                                          },
                                                          referToHello = 'hello';


                                                          Now we can refer to the variable by it's index, and since array indexes can be provided using a variable we are de facto making use of a variable variable:



                                                          console.log(vv[referToHello]); //Output: hello world


                                                          The Answer To Your Question



                                                          Let's apply this to the code you supplied in the original question:



                                                              var vv = {
                                                          'x': 'variable',
                                                          'variable': 'hello world!'
                                                          };
                                                          console.log(vv[vv['x']]); //Displays "hello, world!"


                                                          A Practical Use



                                                          While the previous code might appear ridiculously cumbersome and impractical, there are practical uses for variable variables in JavaScript using this type of encapsulation. In the example below we use the same concept to get the ID of an undefined number of HTML elements.



                                                          var elementIds = ,
                                                          elements = ['message','fillOrStroke','sizePicker','colorPicker']; //The items in this array could be defined automatically via an input, database query, event, etc.
                                                          elements.forEach( (element) => {
                                                          elementIds[element] = document.getElementById(element);
                                                          });


                                                          This example declares variable variables (keys in elementIds) based on the ID of each element, and will assign the node of said element as the value of each variable. And since using global variables in JavaScript is generally discouraged giving your variable variables a unique scope (in this instance, declaring them inside the elementIds array) is not only neat, but also more responsible.






                                                          share|improve this answer












                                                          Unlike PHP, JavaScript doesn't offer access to the globals array (which contains references to all the variable names currently declared). As such, JavaScript does not offer native support for variable variables. You can, however, emulate this feature as long as you define all your variables as part of an array or an object. This will in turn create a gloabls array for you. For example, instead of declaring the variable hello in the global scope like this:



                                                          var hello = 'hello world';


                                                          let's encapsulate it inside an object. We'll call that object vv (variable variables):



                                                          var vv = {
                                                          'hello': 'hello world',
                                                          //Other variable variables come here.
                                                          },
                                                          referToHello = 'hello';


                                                          Now we can refer to the variable by it's index, and since array indexes can be provided using a variable we are de facto making use of a variable variable:



                                                          console.log(vv[referToHello]); //Output: hello world


                                                          The Answer To Your Question



                                                          Let's apply this to the code you supplied in the original question:



                                                              var vv = {
                                                          'x': 'variable',
                                                          'variable': 'hello world!'
                                                          };
                                                          console.log(vv[vv['x']]); //Displays "hello, world!"


                                                          A Practical Use



                                                          While the previous code might appear ridiculously cumbersome and impractical, there are practical uses for variable variables in JavaScript using this type of encapsulation. In the example below we use the same concept to get the ID of an undefined number of HTML elements.



                                                          var elementIds = ,
                                                          elements = ['message','fillOrStroke','sizePicker','colorPicker']; //The items in this array could be defined automatically via an input, database query, event, etc.
                                                          elements.forEach( (element) => {
                                                          elementIds[element] = document.getElementById(element);
                                                          });


                                                          This example declares variable variables (keys in elementIds) based on the ID of each element, and will assign the node of said element as the value of each variable. And since using global variables in JavaScript is generally discouraged giving your variable variables a unique scope (in this instance, declaring them inside the elementIds array) is not only neat, but also more responsible.







                                                          share|improve this answer












                                                          share|improve this answer



                                                          share|improve this answer










                                                          answered Nov 20 '17 at 11:22









                                                          Nadav

                                                          443313




                                                          443313

















                                                              protected by Samuel Liew Nov 29 '16 at 3:26



                                                              Thank you for your interest in this question.
                                                              Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).



                                                              Would you like to answer one of these unanswered questions instead?



                                                              Popular posts from this blog

                                                              Xamarin.iOS Cant Deploy on Iphone

                                                              Glorious Revolution

                                                              Dulmage-Mendelsohn matrix decomposition in Python