【发布时间】:2010-12-12 11:10:46
【问题描述】:
有没有办法使用包含其名称的字符串来引用 Javascript 变量?
示例:
var myText = 'hello world!';
var someString = 'myText';
//how to output myText value using someString?
【问题讨论】:
标签: javascript syntax variables
有没有办法使用包含其名称的字符串来引用 Javascript 变量?
示例:
var myText = 'hello world!';
var someString = 'myText';
//how to output myText value using someString?
【问题讨论】:
标签: javascript syntax variables
您可以使用eval 来做这件事,但我会不惜一切代价避免这种事情。
alert(eval(someString));
如果您发现自己需要这样做,更好的方法是使用哈希表。
var stuff = { myText: 'hello world!' };
var someString = 'myText';
alert( stuff[someString] );
【讨论】:
var obj = {'eleID':'varname'}; for (var key in obj) { window[obj[key]]; }这似乎不起作用:(
如果该变量在全局范围内,您可以在全局对象上使用bracket notation:
var myText = 'hello world!';
var someString = 'myText';
alert(window[someString]);
【讨论】:
eval() 适用于我的主要案例,但我无法检查我使用 eval() 进行锻炼的变量是否已定义。 typeof window[event.data.lingua_target_content_var] !== 'undefined' 在eval() 抛出错误时有效!
假设这是在顶层,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);
这样做的愿望通常是一种“代码味道”。或许还有更优雅的方式……
【讨论】:
eval("alert(" + someString + ");");
会起作用的。
【讨论】:
eval 会这样做:
var myText = 'hello world!!';
var someString = eval('myText');
document.getElementById('hello').innerHTML = someString;
【讨论】: