开发者

How can I refer to a variable using a string containing its name?

Is there a way to refer to a Javascript variable with a string that co开发者_StackOverflowntains its name?

example:

var myText = 'hello world!';
var someString = 'myText';

//how to output myText value using someString?


You can use an eval to do it, though I try to avoid that sort of thing at all costs.

alert(eval(someString));

A better way, if you find yourself needing to do this, is to use a hash table.

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


If that variable is on the global scope, you can use the bracket notation on the global object:

var myText = 'hello world!';
var someString = 'myText';

alert(window[someString]);


Assuming this is at the top level, window[someString] === "hello world!".


In JavaScript, there is no standard for creating a 'Master Object', or any built-in method to access variables on the initial scope with a string reference that I am aware of.

However, if you are using JavaScript for web development on a browser, the window Object will give you complete access to your current scope. For example:

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

This method will allow you to reference any scope-variable WITHOUT making it a string, but you can also use a string as needed with the bracket ([]) Selectors.

window['myVar']

It is worth mentioning that keeping data as a variable directly on the current scope leaves it open to be re-defined by other scripts running. Your variable can be overwritten by function argument names, for loop variables, and simply by assigning a new value to that variable.

To overcome this, I suggest using an Object to store all relevant data to your application (Static And/Or OOP). Like this:

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

//Referencing relative variables
alert($myApp.var1);


You can do this with eval:

var myText = 'hello world!';
var someString = 'myText';

eval('var theTextInMyText = ' + someString + ';');

alert(theTextInMyText);

The desire to do this at all usually is a "code smell". Perhaps there is a more elegant way...


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

would work.


eval will do that:

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

document.getElementById('hello').innerHTML = someString;

As demonstrated here.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜