with variable from convertir convert array javascript variables

variable - javascript eval function with parameters



Convertir cadena a nombre de variable en JavaScript (9)

El método de la ventana [''nombre de variable''] SOLO funciona si la variable está definida en el ámbito global. La respuesta correcta es "Refactor". Si puede proporcionar un contexto de "Objeto", existe una posible solución general, pero hay algunas variables que ninguna función global podría resolver en función del alcance de la variable.

(function(){ var findMe = ''no way''; })();

He buscado soluciones, pero no pude encontrar ninguna que funcione.

Tengo una variable llamada onlyVideo .

"onlyVideo" la cadena se pasa a una función. Quiero establecer la variable onlyVideo dentro de la función como algo. ¿Cómo puedo hacer eso?

(Hay una serie de variables que podrían ser llamadas a la función, por lo que necesito que funcione dinámicamente, no codificado en if declaraciones).

Editar: probablemente hay una mejor manera de hacer lo que estás intentando hacer. Pregunté esto temprano en mi aventura de JavaScript. Compruebe cómo funcionan los objetos de JavaScript.

Una introducción simple:

// create JavaScript object var obj = { "key1": 1 }; // assign - set "key2" to 2 obj.key2 = 2; // read values obj.key1 === 1; obj.key2 === 2; // read values with a string, same result as above // but works with special characters and spaces // and of course variables obj["key1"] === 1; obj["key2"] === 2; // read with a variable var key1Str = "key1"; obj[key1Str] === 1;


En cuanto a eval vs soluciones de variable global ...

Creo que hay ventajas para cada uno, pero esto es realmente una falsa dicotomía. Si está paranoico del espacio de nombres global, cree un espacio de nombres temporal y use la misma técnica.

var tempNamespace = {}; var myString = "myVarProperty"; tempNamespace[myString] = 5;

Bastante seguro de que luego podría acceder como tempNamespace.myVarProperty (ahora 5), ​​evitando usar la ventana para el almacenamiento. (La cadena también se puede poner directamente en los corchetes)


Javascript tiene una función eval() para tales ocasiones:

function (varString) { var myVar = eval(varString); // ..... }

Edit: Lo siento, creo que me salté la pregunta demasiado rápido. Esto solo te dará la variable, para configurarla necesitas

function SetTo5(varString) { var newValue = 5; eval(varString + " = " + newValue); }

o si está utilizando una cadena:

function SetToString(varString) { var newValue = "string"; eval(varString + " = " + "''" + newValue + "''"); }

¿Pero me imagino que hay una manera más apropiada de lograr lo que estás buscando? No creo que eval () sea algo que realmente quieras usar a menos que haya una buena razón para ello. eval()


Puede acceder al objeto de la ventana como una matriz asociativa y configurarlo de esa manera

window["onlyVideo"] = "TEST"; document.write(onlyVideo);


Puedes hacer asi

var name = "foo"; var value = "Hello foos"; eval("var "+name+" = ''"+value+"'';"); alert(foo);


Se puede hacer así.

(function(X, Y) { // X is the local name of the ''class'' // Doo is default value if param X is empty var X = (typeof X == ''string'') ? X: ''Doo''; var Y = (typeof Y == ''string'') ? Y: ''doo''; // this refers to the local X defined above this[X] = function(doo) { // object variable this.doo = doo || ''doo it''; } // prototypal inheritance for methods // defined by another this[X].prototype[Y] = function() { return this.doo || ''doo''; }; // make X global window[X] = this[X]; }(''Dooa'', ''dooa'')); // give the names here // test doo = new Dooa(''abc''); doo2 = new Dooa(''def''); console.log(doo.dooa()); console.log(doo2.dooa());


Si está intentando acceder a la propiedad de un objeto, debe comenzar con el alcance de la window y recorrer cada propiedad del objeto hasta que llegue a la que desea. Suponiendo que abc se haya definido en otro lugar en el script, puede usar lo siguiente:

var values = window; var str = ''a.b.c''.values.split(''.''); for(var i=0; i < str.length; i++) values = values[str[i]];

Esto funcionará para obtener la propiedad de cualquier objeto, sin importar qué tan profundo sea.


Si se trata de una variable global, la window[variableName] o en su window["onlyVideo"] caso window["onlyVideo"] deberían hacer el truco.