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

IT技术 javascript syntax variables
2021-02-09 15:22:28

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

例子:

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

//how to output myText value using someString?
6个回答

您可以使用 aneval来做到这一点,但我会不惜一切代价避免这种事情。

alert(eval(someString));

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

var stuff = { myText: 'hello world!' };
var someString = 'myText';
alert( stuff[someString] );
如果我宁愿使用 window['varname']; 方法,我将如何使用对象来做到这一点? var obj = {'eleID':'varname'}; for (var key in obj) { window[obj[key]]; } 这似乎不起作用:(
2021-03-17 15:22:28
我一直看到人们说避免使用 eval 来解决这个问题和类似的问题——但为什么呢?
2021-04-01 15:22:28

如果该变量在全局范围内,则可以在全局对象上使用括号表示法

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

alert(window[someString]);
超好的!谢谢!这就是我要找的!eval()适用于我的主要案例,但我无法检查我eval()用来锻炼的变量是否已定义。typeof window[event.data.lingua_target_content_var] !== 'undefined'工作时eval()抛出一个错误!
2021-03-26 15:22:28
惊人的答案节省了使用 eval +1希望我可以+10
2021-03-29 15:22:28

假设这是在顶层,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);

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