Javascript 如何使用包含变量名称的字符串引用变量?

Javascript 如何使用包含变量名称的字符串引用变量?,javascript,syntax,variables,Javascript,Syntax,Variables,有没有办法用包含名称的字符串引用Javascript变量 例如: var myText = 'hello world!'; var someString = 'myText'; //how to output myText value using someString? 您可以使用eval执行此操作: var myText = 'hello world!'; var someString = 'myText'; eval('var theTextInMyText = ' + someStr

有没有办法用包含名称的字符串引用Javascript变量

例如:

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

//how to output myText value using someString?

您可以使用
eval
执行此操作:

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

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

alert(theTextInMyText);

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

你可以使用
评估来做,尽管我会不惜一切代价避免这种事情

alert(eval(someString));
如果您发现自己需要这样做,更好的方法是使用哈希表

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

会起作用。

eval
会起作用:

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

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

如。

如果该变量在全局范围内,则可以在全局对象上使用:

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

alert(window[someString]);

假设这是JavaScript中的顶层,
window[someString]==“hello world!”

,则没有创建“主对象”的标准,也没有任何内置方法来访问初始作用域上的变量,我知道它带有字符串引用

但是,如果您在浏览器上使用JavaScript进行web开发,则
窗口
对象将允许您完全访问当前范围。例如:

myVar = "This is my var"; 
if(myVar == window.myVar){
     /*
         This statement would return true
         Because both variables reference
         the same string;
     */
}
此方法允许您引用任何范围变量,而无需将其设置为字符串,但您也可以根据需要将字符串与括号(
[]
)选择器一起使用

window['myVar']
值得一提的是,将数据作为变量直接保留在当前作用域中会使其打开,以便由运行的其他脚本重新定义。对于循环变量,可以通过函数参数名称覆盖变量,只需为该变量指定一个新值即可

为了克服这个问题,我建议使用一个对象将所有相关数据存储到应用程序中(静态和/或OOP)。像这样:

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

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

看:惊人的答案节省了eval+1的使用希望我能+10这么好!非常感谢。这就是我要找的
eval()
适用于我的主要案例,但我无法检查我使用的
eval()
进行练习的变量是否已定义<代码>窗口类型[事件.数据.语言\目标\内容\变量]!='未定义的“
eval()
引发错误时起作用!如果我更愿意使用窗口['varname'];方法,我将如何使用对象来实现它<代码>var obj={'eleID':'varname'};对于(var-key-in-obj){window[obj[key]];}这似乎不起作用:(我一直看到人们说避免使用eval来回答这个和类似的问题——但为什么?
$myApp = {
     var1 : 'This is Var1',
     apply : function(){
          alert('Started!');
     }
}

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