Javascript中,使用包含其名称的string引用一个variables?

有没有办法引用一个string包含其名称的JavaScriptvariables?

例:

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

您可以使用eval来做到这一点,尽pipe我不惜一切代价尽量避免这种事情。

 alert(eval(someString)); 

一个更好的方法,如果你发现自己需要这样做,就是使用一个哈希表。

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

如果该variables位于全局范围内,则可以在全局对象上使用括号表示法 :

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

你可以用eval来做到这一点:

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

这样做的愿望通常是“代码味道”。 也许有一种更优雅的方式…

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

会工作。

eval将做到这一点:

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

如这里所示 。

假设这是在顶层, window[someString] === "hello world!"

在JavaScript中,没有创build“主对象”的标准,也没有任何内置的方法来访问初始作用域的variables,这是我意识到的string引用。

但是,如果您在浏览器上使用JavaScript进行Web开发,则window对象将为您提供对当前范围的完整访问权限。 例如:

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

此方法将允许您引用任何作用域variables而不使其成为string,但也可以根据需要使用括号( [] )select器来使用string。

 window['myVar'] 

值得一提的是,将数据作为一个variables直接保存在当前范围内,可以让其他运行的脚本重新定义。 您的variables可以被函数参数名称,循环variables以及简单的赋值给该variables。

为了克服这一点,我build议使用一个对象来存储所有相关的数据到你的应用程序(静态和/或OOP)。 喜欢这个:

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

eval()在我的testing中不起作用。 但是,向DOM树添加新的JavaScript代码是可能的。 所以这是一个添加一个新variables的函数:

 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.getElementById("head") node_head.appendChild(node_script); } createVariable("dynamicVar", "some content") console.log(dynamicVar)