有没有办法使用包含其名称的字符串引用Javascript变量?
示例:
var myText = 'hello world!';
var someString = 'myText';
//how to output myText value using someString?
答案 0 :(得分:41)
您可以使用eval
来执行此操作,但我会不惜一切代价避免这种情况。
alert(eval(someString));
更好的方法是,如果你发现自己需要这样做,就是使用哈希表。
var stuff = { myText: 'hello world!' };
var someString = 'myText';
alert( stuff[someString] );
答案 1 :(得分:29)
如果该变量在全局范围内,则可以在全局对象上使用bracket notation:
var myText = 'hello world!';
var someString = 'myText';
alert(window[someString]);
答案 2 :(得分:1)
您可以使用eval
:
var myText = 'hello world!';
var someString = 'myText';
eval('var theTextInMyText = ' + someString + ';');
alert(theTextInMyText);
这样做的愿望通常是“代码味”。也许有更优雅的方式...
答案 3 :(得分:1)
eval("alert(" + someString + ");");
会起作用。
答案 4 :(得分:1)
eval
会这样做:
var myText = 'hello world!!';
var someString = eval('myText');
document.getElementById('hello').innerHTML = someString;
答案 5 :(得分:1)
假设这是顶级window[someString] === "hello world!"
。
答案 6 :(得分:1)
在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']
值得一提的是,将数据作为变量直接保存在当前作用域上会使其可以被其他运行的脚本重新定义。您的变量可以被函数参数名称,循环变量覆盖,只需为该变量赋值即可。
为了解决这个问题,我建议使用Object将所有相关数据存储到您的应用程序中(静态和/或OOP)。像这样:
$myApp = {
var1 : 'This is Var1',
apply : function(){
alert('Started!');
}
}
//Referencing relative variables
alert($myApp.var1);