有没有办法用包含其名称的字符串来引用 Javascript 变量?
例子:
var myText = 'hello world!';
var someString = 'myText';
//how to output myText value using someString?
有没有办法用包含其名称的字符串来引用 Javascript 变量?
例子:
var myText = 'hello world!';
var someString = 'myText';
//how to output myText value using someString?
您可以使用 aneval
来做到这一点,但我会不惜一切代价避免这种事情。
alert(eval(someString));
如果您发现自己需要这样做,更好的方法是使用哈希表。
var stuff = { myText: 'hello world!' };
var someString = 'myText';
alert( stuff[someString] );
如果该变量在全局范围内,则可以在全局对象上使用括号表示法:
var myText = 'hello world!';
var someString = 'myText';
alert(window[someString]);
假设这是在顶层,window[someString] === "hello world!"
.
在 JavaScript 中,没有创建“主对象”的标准,也没有任何内置方法来使用我知道的字符串引用访问初始范围内的变量。
但是,如果您在浏览器上使用 JavaScript 进行 Web 开发,则window
对象将使您能够完全访问当前范围。例如:
myVar = "This is my var";
if(myVar == window.myVar){
/*
This statement would return true
Because both variables reference
the same string;
*/
}
此方法将允许您引用任何范围变量而不使其成为字符串,但您也可以根据需要使用带有括号 ( []
) 选择器的字符串。
window['myVar']
值得一提的是,将数据作为变量直接保存在当前作用域上,可以让其他正在运行的脚本重新定义它。您的变量可以被函数参数名称、for 循环变量覆盖,并且只需为该变量分配一个新值即可。
为了克服这个问题,我建议使用对象将所有相关数据存储到您的应用程序(静态和/或 OOP)。像这样:
$myApp = {
var1 : 'This is Var1',
apply : function(){
alert('Started!');
}
}
//Referencing relative variables
alert($myApp.var1);
你可以这样做eval
:
var myText = 'hello world!';
var someString = 'myText';
eval('var theTextInMyText = ' + someString + ';');
alert(theTextInMyText);
这样做的愿望通常是一种“代码气味”。也许有更优雅的方式......