Javascript, refere-se a uma variável usando uma string contendo seu nome?

Existe uma maneira de se referir a uma variável Javascript com uma string que contém seu nome?

exemplo:

var myText = 'hello world!'; var someString = 'myText'; //how to output myText value using someString? 

Você pode usar um eval para fazê-lo, embora eu tente evitar esse tipo de coisa a todo custo.

 alert(eval(someString)); 

Uma maneira melhor, se você precisar fazer isso, é usar uma tabela de hash.

 var stuff = { myText: 'hello world!' }; var someString = 'myText'; alert( stuff[someString] ); 

Se essa variável estiver no escopo global, você poderá usar a notação de colchetes no object global:

 var myText = 'hello world!'; var someString = 'myText'; alert(window[someString]); 

Você pode fazer isso com eval :

 var myText = 'hello world!'; var someString = 'myText'; eval('var theTextInMyText = ' + someString + ';'); alert(theTextInMyText); 

O desejo de fazer isso geralmente é um “cheiro de código”. Talvez haja uma maneira mais elegante …

 eval("alert(" + someString + ");"); 

podia funcionar.

eval fará isso:

 var myText = 'hello world!!'; var someString = eval('myText'); document.getElementById('hello').innerHTML = someString; 

Como demonstrado aqui .

Assumindo que isso esteja no nível superior, window[someString] === "hello world!" .

Em JavaScript, não existe um padrão para criar um ‘Objeto Mestre’, ou qualquer método embutido para acessar variables ​​no escopo inicial com uma referência de string que eu saiba.

No entanto, se você estiver usando JavaScript para desenvolvimento da Web em um navegador, a window Objeto fornecerá access completo ao seu escopo atual. Por exemplo:

 myVar = "This is my var"; if(myVar == window.myVar){ /* This statement would return true Because both variables reference the same string; */ } 

Este método permitirá que você faça referência a qualquer variável de escopo, sem torná-lo uma string, mas você também pode usar uma string, conforme necessário, com os Seletores de colchetes ( [] ).

 window['myVar'] 

Vale ressaltar que manter os dados como uma variável diretamente no escopo atual deixa aberto para ser redefinido por outros scripts em execução. Sua variável pode ser sobrescrita por nomes de argumentos de function, por variables ​​de loop e simplesmente atribuindo um novo valor a essa variável.

Para superar isso, sugiro usar um object para armazenar todos os dados relevantes para o seu aplicativo (Static And / Or OOP). Como isso:

 $myApp = { var1 : 'This is Var1', apply : function(){ alert('Started!'); } } //Referencing relative variables alert($myApp.var1);