【问题标题】:concatenate string with integer to use as a variable (creating dynamic variables) in jquery将字符串与整数连接以在 jquery 中用作变量(创建动态变量)
【发布时间】:2015-05-26 11:12:39
【问题描述】:

我有一个数组ARRAY,它的长度是动态的。在下面的示例中,它是 5,但也可能是 10 或 15

ARRAY = [A,B,C,D,E];
var mlength = ARRAY.length;
Using this mlength, how can I create variables. For example  

我想指定为

 mname0=ARRAY[0]; mname1 = ARRAY[1]; mname2= ARRAY[2]; mname3 = ARRAY[3]; mname4 = ARRAY[4];

我已经尝试了下面的代码。但这会产生引用错误 Invalid left-hand side in assignment

 for (var i = 0, mlength = ARRAY.length; i < mlength; i++) {
     'mname'+i = ARRAY[i];
 }

如何创建动态变量?

【问题讨论】:

    标签: javascript jquery arrays variables for-loop


    【解决方案1】:

    全局范围内的变量也可以被视为窗口对象的成员:

    var mname,ARRAY = ["A","B","C","D","E"];
    var mlength = ARRAY.length;
    for(var i=0;i<mlength;i++){
        window["mname"+i]=ARRAY[i];
    }
    alert(mname0);

    但您应该考虑直接使用 ARRAY 来代替

    【讨论】:

      【解决方案2】:

      改成这样:

      var ARRAY = ['A', 'B', 'C', 'D', 'E'];
      var mlength = ARRAY.length;
      
      
      for (var i = 0; i < mlength; i++) {
        console.log('mname' + i + ' = ' + ARRAY[i]);
      }

      【讨论】:

      • @Karl-AndréGagnon 是的,刚刚看到这个错误是更新的。
      【解决方案3】:

      这个答案来自this question,我是作者。但我不觉得这个问题本身就是重复的。


      要创建动态变量名,这里有 3 个选项。

      eval(不推荐)

      您可以使用 Javascript 函数eval 来实现您想要的。但请注意,这在不推荐(我强调了两次,希望你能理解!)。

      不要不必要地使用 eval!

      eval() 是一个危险的函数,它以调用者的权限执行它传递的代码。如果您使用可能受到恶意方影响的字符串运行 eval(),您最终可能会在具有您网页/扩展程序权限的用户计算机上运行恶意代码。更重要的是,第三方代码可以看到 eval() 被调用的范围,这可能导致类似 Function 不易受到的攻击。

      会这样使用:

      eval('var mname' + i + ' = "something";');
      

      Window 对象表示法(比eval 更好,仍然不推荐)

      此方法包括在全局窗口对象上使用 JavaScript 提供的对象表示法。这会污染全局窗口范围,并且可以被其他不好的 JS 文件覆盖。如果您想了解有关该主题的更多信息,这是一个很好的问题:Storing a variable in the JavaScript 'window' object is a proper way to use that object?

      要使用该方法,您可以这样做:

      window['mname' + i] = something;
      alert(window[varName]);
      

      使用对象(推荐)

      最好的解决方案是创建自己的变量范围。例如,您可以在全局范围内创建一个变量并为其分配一个对象。然后,您可以使用对象符号来创建动态变量。它的工作方式与窗口相同:

      var globalScope = {};
      
      function awesome(){
          var localScope = {};
          globalScope['mname' + i] = 'something';
          localScope['mname' + i] = 'else';
      
          notSoAwesome();
      }
      
      function notSoAwesome(){
          alert(globalScope['mname' + i]); // 'something';
          alert(localScope['mname' + i]); // undefined
      }
      

      【讨论】:

        【解决方案4】:

        试试这个,

        var arr= [];
        for(var i =0; i <15; i++) {
          arr.push[{'mname'+i: 'ARRAY'+i}];
        }
        

        【讨论】:

        • 我不想创建数组 mname。我想创建变量 mname0、mname1、mname2..... 其中 var mname0 = A、var mname1 = B、var mname2 = C 等等
        【解决方案5】:

        这是我生成数组的链接

        $(document).ready(function (e){  
             var cars = ["Saab", "Volvo", "BMW"];
             var text=''; 
             var mname="name";
        
             for (i = 0; i < cars.length; i++) { 
                text += mname+i+'='+cars[i]+',';
             }
             alert(text);
        });
        

        您的增量值将根据您的要求动态生成字符串。 我希望这会对你有所帮助。

        【讨论】:

          【解决方案6】:

          你可以这样做。

          var mname;
          var ARRAY = ['A','B','C','D','E'];
          var mlength = ARRAY.length;
          for(var i=0;i<mlength;i++){
             window['mname'+i]=ARRAY[i];
          }
          console.log(mname1);
          

          所以这可能会对你有所帮助。在这段代码中,我将所有变量作为窗口对象成员,因为 Window 是全局对象。

          【讨论】:

          • 我也试过了,我得到了同样的错误 Uncaught ReferenceError: Invalid left-hand side in assignment
          • @rjirji 请立即查看。
          猜你喜欢
          • 2015-09-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-20
          • 2012-02-17
          • 2023-03-07
          • 2012-06-24
          • 1970-01-01
          相关资源
          最近更新 更多