【问题标题】:for loop help, unknown syntax with javascriptfor 循环帮助,javascript 的未知语法
【发布时间】:2011-02-17 15:05:40
【问题描述】:

说我想使用像这样的变量

var userpos1 : int;
var userpos2 : int;
var userpos3 : int;

//in a for loop like 

var i=1;
for (i=1;i<=3;i++)
{
    userposi + 1
}

我将如何放置 i 以便 for 循环正确地遍历我的所有变量

var userpos1var : int;
var userpos2var : int;
var userpos3var : int;

//in a for loop like 

var i=1;
for (i=1;i<=3;i++)
{
    userposivar + 1
}

我需要对此做些什么来使其正常工作,例如围绕它的 "" 或 []?

【问题讨论】:

    标签: javascript loops for-loop


    【解决方案1】:

    创建一个包含这些变量的数组并像这样遍历

    for(i = 0; i < 3; i++)
    {
        func(arr[i]);
    }
    

    【讨论】:

      【解决方案2】:

      你应该使用一个变量数组来代替,但是要做你想做的事情,你会写:

      eval("userpos" + i + "var") + 1
      

      eval 使用起来可能不安全,并且表现不佳。

      【讨论】:

      • 向刚接触 javascript 的用户推荐 eval() 的使用,恕我直言不赞成。
      • Exelian - 阅读我的答案。它尚未被编辑。我建议使用数组代替,并警告它不安全且速度慢。但我不会忽视 eval 确实完全 满足他对这个案例的要求。作为一个成年人,我假设用户可以接受信息、警告并做出决定。
      • 我推荐使用 Function 构造函数。应该比 eval() 更好。
      • 赞成,因为你的解决方案比我的好;您针对所提出的问题提供了警告和适当的解决方案。
      【解决方案3】:
      <script type="text/javascript">
      var userpos1 = 1;
      var userpos2 = 2;
      var userpos3 = 3;
      var i = 1;
      for (i=1;i<=3;i++)
      {
          alert (eval("userpos" + i));
      }
      </script>
      

      【讨论】:

      • 向刚接触 javascript 的用户推荐 eval() 的使用,恕我直言不赞成。
      • 你的观点是错误的,我只是为他的问题提供一个解决方案。我会这样做吗,不,但这就是在 JS 中您可以解决他提出的问题的方式。
      • 好吧,您可以添加一条评论,说明这不是使用 eval 的首选方式并警告它的使用。
      • @yetanothercoder - 我也同意,但 eval 语句本身并没有做任何重要的事情。也许你的意思是这样的:eval('userpos' + i + ' += ' + i);
      • @exelian:我真的不感谢你在下面对蒂姆投反对票,因为他提供了警告
      【解决方案4】:

      为什么不使用数组...?

      var userpos = new Array(3);
      
      for (var i=0; i<userpos.length; i++) {}
      {
          userpos[i] = i;
      }
      

      【讨论】:

        【解决方案5】:

        通过将这些值存储在单个数组中并遍历该数组,这更容易完成。

        someArray = new Array(1, 2, 3);
        for (key in someArray)
           alert(someArray[key] ); 
        

        【讨论】:

        • 此函数未保存。如果你也添加了函数,Array 的原型就会中断,除非你添加一个检查。
        • 不推荐 for-in。当涉及到大型集合或数组时,它是贪婪的。
        • 两个有效点。我的回答只是为了满足 OP 的问题。
        【解决方案6】:

        不要这样做,而是使用用户位置数组:

        //创建一个3个位置的数组, 全部设置为 0

        var userPos=new Array(0, 0, 0);

        //循环遍历每个位置 - 注意 从 0 开始。

        for (var i = 0; i

        {

        userPos[i] += 1;

        }

        【讨论】:

          【解决方案7】:

          Eval() 会这样做,但我们不应该鼓励使用它。而是构造一个匿名函数。

          for ( i = 1; i <= 3; i++ ) {
              alert(new Function('return userpos' + i + 'var;')()); // value of userpos1var
          }
          

          更新 JSFiddle 示例:http://jsfiddle.net/madr/AHBrd/

          【讨论】:

          • 我看不出这段代码比 eval 更安全。无论哪种方式,您都是从字符串执行源代码。
          • 如果我没记错的话,Function 构造函数是一个小的性能提升(虽然我没有来源),而且恕我直言,它更优雅一些。
          【解决方案8】:

          您正在寻找的是:

          var userpos = ['a','b','c'];
          
          for(var i=0; i < userpos.length; i++) {
              userpos[i]; // doing something with it.
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-12-21
            • 2018-05-16
            • 2017-04-25
            • 1970-01-01
            • 2015-03-30
            • 2021-05-31
            相关资源
            最近更新 更多