dinamicas - Usar nombres de variables dinámicas en JavaScript
javascript>: eval (11)
En PHP puedes hacer cosas asombrosas / horrendas como esta:
$a = 1;
$b = 2;
$c = 3;
$name = ''a'';
echo $$name;
// prints 1
¿Hay alguna manera de hacer algo como esto con Javascript?
Por ejemplo, si tengo un var name = ''the name of the variable'';
¿Puedo obtener una referencia a la variable con nombre name
?
Dado que ECMA- / Javascript tiene que ver con Objects
y Contexts
(que, también son una especie de Objeto), cada variable se almacena en una variable llamada (o en el caso de una Función, Objeto de Activación ).
Así que si creas variables como esta:
var a = 1,
b = 2,
c = 3;
En el ámbito global (= contexto de la función NO), escribe esas variables implícitamente en el objeto Global (= window
en un navegador).
Se puede acceder a ellos usando la notación "punto" o "corchete":
var name = window.a;
o
var name = window[''a''];
Esto solo funciona para el objeto global en esta instancia particular, porque el Objeto Variable del Objeto Global es el objeto de window
sí. En el contexto de una función, no tiene acceso directo al objeto de activación . Por ejemplo:
function foobar() {
this.a = 1;
this.b = 2;
var name = window[''a'']; // === undefined
alert(name);
name = this[''a'']; // === 1
alert(name);
}
new foobar();
new
crea una nueva instancia de un objeto autodefinido (contexto). Sin new
el alcance de la función también sería global
(= ventana). Este ejemplo alertaría undefined
y 1
respectivamente. Si reemplazáramos this.a = 1; this.b = 2
this.a = 1; this.b = 2
con:
var a = 1,
b = 2;
Ambas salidas de alerta serían indefinidas. En ese escenario, las variables a
y b
se almacenarán en el Objeto de activación de foobar
, al que no podemos acceder (por supuesto, podemos acceder a ellas directamente llamando a
b
).
En Javascript puede usar el hecho de que todas las propiedades son pares de valores clave. John ya mencionó esto, pero no creo que su respuesta muestre cómo puede ser explotada.
Por lo general, no está intentando crear una variable para mantener un nombre de variable, sino que está intentando generar nombres de variable y luego usarlos. PHP lo hace con $$var
notación pero Javascript no necesita hacerlo porque las claves de propiedad son intercambiables con claves de matriz.
var id = "abc";
var mine = {};
mine[id] = 123;
console.log(mine.abc);
da 123. Por lo general, usted desea construir la variable, por eso existe la indirección, de modo que también puede hacerlo al revés.
var mine = {};
mine.abc = 123;
console.log(mine["a"+"bc"]);
Esto es un ejemplo :
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
Otro ejemplo :
var myVariable = ''coco'';
window[myVariable] = ''riko'';
alert(coco); // display : riko
Entonces, el valor " coco " de myVariable se convierte en un coco variable.
Porque todas las variables en el ámbito global son propiedades del objeto Window.
Lo que quieren decir es que no, no puedes. No hay manera de hacerlo. así que era posible que pudieras hacer algo como esto
function create(obj, const){
// where obj is an object and const is a variable name
function const () {}
const.prototype.myProperty = property_value;
// .. more prototype
return new const();
}
Tener una función de creación como la implementada en ECMAScript 5.
Necesitaba dibujar múltiples FormData sobre la marcha y la forma de los objetos funcionaba bien
var forms = {}
Luego, en mis bucles, donde sea que sea necesario para crear un formulario, utilicé
forms["formdata"+counter]=new FormData();
forms["formdata"+counter].append(var_name, var_value);
Puedes usar el objeto de la ventana para llegar a él.
window[''myVar'']
window
tiene una referencia a todas las variables globales y funciones globales que está utilizando.
Si no desea utilizar un objeto global como window o global (nodo), puede intentar algo como esto:
var obj = {};
obj[''whatever''] = ''There/'s no need to store even more stuff in a global object.'';
console.log(obj[''whatever'']);
Simplemente no sé qué mala respuesta obtiene tantos votos. Es una respuesta bastante fácil pero lo haces complejo.
// 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);
eval () no funcionó en mis pruebas. Pero es posible agregar un nuevo código JavaScript al árbol DOM. Así que aquí hay una función que agrega una nueva variable:
function createVariable(varName,varContent)
{
var scriptStr = "var "+varName+"= /""+varContent+"/""
var node_scriptCode = document.createTextNode( scriptStr )
var node_script = document.createElement("script");
node_script.type = "text/javascript"
node_script.appendChild(node_scriptCode);
var node_head = document.getElementsByTagName("head")[0]
node_head.appendChild(node_script);
}
createVariable("dynamicVar", "some content")
console.log(dynamicVar)
eval
es una opcion
var a = 1;
var name = ''a'';
document.write(eval(name)); // 1
a = ''varname'';
str = a+'' = ''+''123'';
eval(str)
alert(varname);
Prueba esto...