Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

"Variable" variables in JavaScript

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

$x = "variable"; $$x = "Hello, World!"; echo $variable; // Displays "Hello, World!" 

Is it possible to refer to a variable by its name as a string in JavaScript? How would it be done?

like image 820
ShoeLace1291 Avatar asked Mar 03 '11 22:03

ShoeLace1291


People also ask

What are variables in JavaScript?

A JavaScript variable is simply a name of storage location. There are two types of variables in JavaScript : local variable and global variable. There are some rules while declaring a JavaScript variable (also known as identifiers). Name must start with a letter (a to z or A to Z), underscore( _ ), or dollar( $ ) sign.

What are the three types of variables in JavaScript?

Variables can be used to store data in a program, such as strings, numbers, JSON objects, or boolean values. In JavaScript, there are three different variable types: var , let , and const . Each of these variables have several rules around how they should be used, and have different characteristics.

What are the two types of variables in JavaScript?

JavaScript variables have only two scopes. Global Variables − A global variable has global scope which means it can be defined anywhere in your JavaScript code. Local Variables − A local variable will be visible only within a function where it is defined. Function parameters are always local to that function.


1 Answers

tl;dr: Don't use eval!

There is no single solution for this. 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 - DON'T DO THIS!!! 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 - DON'T DO THIS!!! 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]);
like image 74
Felix Kling Avatar answered Sep 19 '22 06:09

Felix Kling