【问题标题】:How can I refer to a variable using a string containing its name?如何使用包含变量名称的字符串来引用变量?
【发布时间】:2010-12-12 11:10:46
【问题描述】:

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

示例:

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

//how to output myText value using someString?

【问题讨论】:

标签: javascript syntax variables


【解决方案1】:

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

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]]; }这似乎不起作用:(
  • 我一直看到人们说要避免使用 eval 来解决这个问题和类似问题 - 但为什么呢?
【解决方案2】:

如果该变量在全局范围内,您可以在全局对象上使用bracket notation

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

alert(window[someString]);

【讨论】:

  • 惊人的答案节省了使用 eval +1 希望我可以 + 10
  • 太好了!谢谢!这就是我要找的! eval() 适用于我的主要案例,但我无法检查我使用 eval() 进行锻炼的变量是否已定义。 typeof window[event.data.lingua_target_content_var] !== 'undefined'eval() 抛出错误时有效!
【解决方案3】:

假设这是在顶层,window[someString] === "hello world!"

【讨论】:

    【解决方案4】:

    在 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);
    

    【讨论】:

      【解决方案5】:

      您可以使用eval

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

      这样做的愿望通常是一种“代码味道”。或许还有更优雅的方式……

      【讨论】:

        【解决方案6】:
        eval("alert(" + someString + ");");
        

        会起作用的。

        【讨论】:

          【解决方案7】:

          eval 会这样做:

          var myText = 'hello world!!';
          var someString = eval('myText');
          
          document.getElementById('hello').innerHTML = someString;
          

          作为demonstrated here

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-04-02
            • 1970-01-01
            • 1970-01-01
            • 2022-01-22
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多