¿Hay alguna manera de encontrar la variable de JavaScript en la página (obténgalo como un objeto) por su nombre? El nombre de la variable está disponible como una constante de cadena.Cómo encontrar la variable de JavaScript por su nombre
Respuesta
<script>
var a ="test";
alert(a);
alert(window["a"]);
alert(eval("a"));
</script>
Por favor, no use 'eval' para esto. –
¿Qué pasa con las variables no globales? ¿Hay alguna otra opción que 'eval'? – mxro
@mxro: en esa situación, querrá usar una [propiedad del objeto] (http://stackoverflow.com/a/25529838/157247). –
Se puede utilizar eval()
never * ever * use eval donde no tenga que – annakata
vote up. pregunta simple merece una respuesta simple. iría con eval() si por alguna razón tuviera que ver el contenido de una variable por su nombre. –
A). ¿Qué no es simple acerca de la ventana [foo]? SEGUNDO). la velocidad y la seguridad no te conciernen, entonces? eval es tóxico, seriamente – annakata
objetos Todo (JS qué variables son) están disponibles en su alcance como las propiedades con nombre de su objeto padre. Donde no existe un padre explícito, es implícitamente el objeto window
.
es decir:
var x = 'abc';
alert(window['x']); //displays 'abc'
y para un objeto complejo:
var x = {y:'abc'};
alert(x['y']); //displays 'abc'
y esto puede ser encadenado:
var x = {y:'abc'};
alert(window['x']['y']); //displays 'abc'
eso es solo cierto para las variables con ámbito global: si el ámbito es de nivel funcional, no hay ningún objeto que permita el acceso al entorno léxico – Christoph
Claro, pero nada lo ayuda allí. Esto supone que puede expresar la var como una construcción de notación de punto. – annakata
Si necesita hacerlo dentro de una función, la única solución es poner sus vars en una objeción y acceder a las claves del objeto, como en este ejemplo: http://stackoverflow.com/questions/4109297/javascript-function-name -como una cadena en autoejecutable-función/4109730 # 4109730 –
Si la cadena hace referencia a una propiedad 'profunda' de una global, como 'Yankee.console.format' puede pasar por las referencias:
String.prototype.deref= function(){
// remove leading and trailing quotes and spaces
var obj= this.replace(/(^[' "]+|[" ']+$)/g,'');
var M= obj.match(/(^[\w\$]+(\.[\w\$]+)*)/);
if(M){
M= M[1].split('.');
obj= window[M.shift()];
while(obj && M.length) obj= obj[M.shift()];
}
return obj || this;
}
Si desea una variable declarada en el contexto global, se adjunta al objeto ventana. ex: window ["variableName"]. Todas las variables son un valor de tabla hash dentro de su alcance.
Si tiene que usar la notación de puntos, querrá seguir la sugerencia de kennebec para navegar por la jerarquía de objetos. eval() también puede funcionar, pero es una operación más costosa de lo que probablemente se necesite.
var getVar = function (obj) {
for(var key in this) {
if(obj === this[key]) return key;
}
};
foo = 'foo';
console.log(getVar(foo)); // => 'foo'
double 'foo' do ayuda a seguir –
Si se trata de una variable global, se puede mirar hacia arriba por su nombre en el objeto global, ya que las variables globales son propiedades del objeto global. En los navegadores, hay una variable global que hace referencia al objeto global llamado window
, por lo que:
var name = "foo";
window.foo = 42;
alert(Number(window[name])); // 42
Pero variables globales son una mala cosa (tm).
Para hacer esto sin globales, utilice su propio objeto:
var name = "foo";
var obj = {};
obj.foo = 42;
alert(Number(obj[name])); // 42
Tanto de la obra anterior, porque en JavaScript, puede hacer referencia a una propiedad de objeto, ya sea con la notación de punto y un literal (obj.foo
), o con notación entre corchetes y una cadena (obj["foo"]
), y en el último caso, la cadena puede ser el resultado de cualquier expresión, incluida una búsqueda variable.
¿Qué pasa si' obj' sería la variable a la que se accederá (y no 'obj.foo') - sería' eval' la única opción entonces? – mxro
@mxro: Si 'obj' fuera global, podría usar' window ["obj"] '. Si no fuera así, entonces tendrías que usar 'eval'. Pero no lo haría, cambiaría mi código para poner 'obj' en un contenedor para poder buscarlo de la manera normal. –
Sí, eso suena bien. Creo que inicialmente creé una variable en una declaración 'eval', que luego solo pude recuperar a través de un segundo' eval', pero luego cambié el código de una variable de contenedor antes de la primera 'eval'; eliminando la necesidad del segundo 'eval'. – mxro
- 1. Emacs: cómo encontrar una variable por su valor?
- 2. Javascript: Obtener acceso a la variable local o variable en el cierre por su nombre
- 3. Conseguir la variable por su nombre en C#
- 4. JavaScript llegar elemento por su nombre
- 5. ¿Cómo encontrar el archivo por su nombre parcial?
- 6. ¿Valor de acceso de variable de JavaScript por nombre?
- 7. objeto de JavaScript: el acceso de propiedad variable por su nombre como cadena
- 8. ¿Cómo cerrar la ventana por su nombre?
- 9. jQuery función de llamada por su nombre
- 10. Obtener nombre de variable. javascript "reflection"
- 11. clase por su nombre
- 12. ¿Cómo encontrar los procedimientos almacenados por nombre?
- 13. leer la variable de entrada en makefile y establecer la variable sobre su nombre
- 14. Encontrar el nombre de la variable pasa a una función
- 15. marco Entidad - conseguir entidad por su nombre
- 16. Javascript - ¿Variable en el nombre de la función, posible?
- 17. ¿Cómo encontrar la fecha/hora GMT por nombre de país?
- 18. ¿Cómo encontrar paquetes por nombre en Eclipse?
- 19. ¿Cómo encontrar un elemento en Watin por su nombre de etiqueta?
- 20. jQuery: Cómo encontrar una imagen por su src
- 21. Obtiene la variable global de forma dinámica por el nombre de la cadena en JavaScript
- 22. encontrar dependencias pom por nombre de clase
- 23. Nombre de la variable como una cadena en Javascript
- 24. Longitud máxima del nombre de la variable en JavaScript
- 25. ¿Por qué la impresión de una variable cambia su valor?
- 26. JavaScript: Obtener valor de argumento y NOMBRE de variable pasada
- 27. Establecimiento de variables por su nombre en Java
- 28. nombre de la variable variable en ramita
- 29. Acceso a variable por nombre de cadena
- 30. ¿Cómo documenta su JavaScript?
Véase también la pregunta posterior con respuestas adicionales: http://stackoverflow.com/questions/5117127/javascript-dynamic-variable-name y http://stackoverflow.com/questions/1664282/javascript-refer-to- a-variable-using-a-string-containing-its-name – goodeye