【问题标题】:Variable name made of a variable value [closed]由变量值组成的变量名[关闭]
【发布时间】:2012-10-01 17:58:58
【问题描述】:

如何使用变量值来命名变量?

var xyz = "test";   
var (xyz) = "abc";
alert (test);

【问题讨论】:

  • 做了一些研究,但没有找到一个简单的答案...
  • 我可以看到它可能有用的情况,但我只能想象如果有可能(它不是,在对象之外或eval())它会导致调试的世界-疼痛。
  • 我有一个对象。并在其中使用一些 html id。因为我将拥有该对象的多个实例,所以我希望它们对于每个实例都不同...
  • @Nomistake,您应该按 ID 创建 div 的映射,而不是创建具有动态名称的变量
  • @Tyler 我想你是说你讨厌它,但这似乎并不保证动态变量名,对吧?特别是全局变量。

标签: javascript


【解决方案1】:

如果你把它们放在一个对象中,你可以这样做:

var Container = {};
var xyz = "test";
Container[xyz] = "abc";
alert(Container['test']);

【讨论】:

    【解决方案2】:

    变量名不能是表达式的结果,除非您使用eval(您不想这样做),或者除非它是一个全局变量。

    如果你需要动态命名,你应该使用一个对象,并动态命名它的属性。这也是动态创建全局变量的方式。

    var xyz = "test";
    
    //global
    
    window[xyz] = "abc";
    
    alert(test);    // "abc"
    
    // object property
    
    var myData = {};
    myData[xyz] = "abc";
    
    alert(myData.test);    // "abc"
    

    【讨论】:

      【解决方案3】:

      eval 这样做:

      xyz = "test";
      eval(xyz+"=123");
      alert(test); // gives 123
      

      我相信很多人对评估说不。但是,这样就可以了。

      【讨论】:

        【解决方案4】:

        如果是全局作用域

        var xyz = "test";   
        window[xyz] = "abc";
        alert (test);
        

        更好地使用对象

        var myObject = {};
        var xyz = "test";   
        myObject [xyz] = "abc";
        alert (myObject.test);
        

        JSFiddle example

        【讨论】:

          【解决方案5】:
          var xyz = "test";   
          eval ( xyz + "= 'abc';");
          alert (test);
          

          【讨论】:

            【解决方案6】:

            不使用 eval 或 with,这样的事情是不可能的,出于各种原因,不推荐使用这些方法。

            但是,您可以将变量用作对象属性的键:

            var key = 'somestring';
            var obj = {};
            
            obj[key] = 'another value';
            

            虽然在全局对象(浏览器中的窗口)上设置属性可以满足您的要求,但我强烈建议不要直接在全局范围内编写业务逻辑代码,尤其是具有动态变量名称。随机名称冲突错误的可能性太严重了。

            【讨论】:

              猜你喜欢
              • 2015-08-31
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-11-27
              • 2022-11-18
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多