chart bootstrap bar javascript variables variable-variables

javascript - bar - line chart bootstrap



Variables "variables" en Javascript? (7)

A diferencia de PHP, JavaScript no ofrece acceso a la matriz global (que contiene referencias a todos los nombres de variables actualmente declarados). Como tal, JavaScript no ofrece soporte nativo para variables variables. Sin embargo, puede emular esta característica siempre que defina todas sus variables como parte de una matriz o un objeto. Esto a su vez creará una matriz de gloabls para ti. Por ejemplo, en lugar de declarar la variable hello en el ámbito global de esta manera:

var hello = ''hello world'';

vamos a encapsularlo dentro de un objeto. Llamaremos a ese objeto vv (variables variables):

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

Ahora podemos referirnos a la variable por su índice, y dado que los índices de matriz se pueden proporcionar usando una variable, de hecho estamos haciendo uso de una variable variable:

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

La respuesta a tu pregunta

Vamos a aplicar esto al código que proporcionó en la pregunta original:

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

Un uso práctico

Si bien el código anterior puede parecer ridículamente engorroso y poco práctico, existen usos prácticos para las variables variables en JavaScript que usan este tipo de encapsulación. En el siguiente ejemplo, usamos el mismo concepto para obtener la ID de un número indefinido de elementos HTML.

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); });

Este ejemplo declara variables variables (claves en elementIds ) basadas en el ID de cada elemento, y asignará el nodo de dicho elemento como el valor de cada variable. Y dado que generalmente se desaconseja usar variables globales en JavaScript, dar a sus variables variables un alcance único (en este caso, declararlas dentro de la matriz elementIds ) no solo es claro, sino también más responsable.

Sé que es posible en PHP tener variables "variables". Por ejemplo

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

¿Es esto posible en javascript? ¿Cómo se haría?


No hay una solución única para esto (bueno, no hay una eval , pero no lo consideremos seriamente). Es posible acceder a las variables globales dinámicamente a través de la window , pero eso no funciona para las variables locales de una función.

¡Casi siempre hay una mejor solución que usar variables variables! En su lugar, debe buscar estructuras de datos y elegir la correcta para su problema.

Si tiene un conjunto fijo de nombres, como

// BAD var foo = 42; var bar = 21; var key = ''foo''; console.log(eval(key));

almacene esos nombres / valores como propiedades de un objeto y use la notación de corchetes para buscarlos dinámicamente:

// GOOD var obj = { foo: 42, bar: 21, }; var key = ''foo''; console.log(obj[key]);

Si tiene variables numeradas "consecutivamente", como

// BAD var foo1 = ''foo''; var foo2 = ''bar''; var foo3 = ''baz''; var index = 1; console.log(eval(''foo'' + index));

entonces debería usar una matriz en su lugar y simplemente usar el índice para acceder al valor correspondiente:

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


Para hacer referencia a una variable en javascript con solo una cadena, puede usar

window[''your_variable_name'']

Puede establecer y referenciar variables, y objetos en variables también.


Por supuesto que puedes, pero no lo haces. Las variables tienen que ser globales.

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


Puede usar la función eval(str) JavaScript.

Lo que hace esta función es convertir la cadena provista en código JS y luego la ejecuta.

Por ejemplo:

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

Entonces, para usarlo como variable variable, puede hacer lo siguiente:

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

Esto producirá exactamente el mismo resultado que:

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

(El ejemplo se toma del manual de PHP sobre variables variables ).



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