【问题标题】:Why am I getting weird increments in my for loop?为什么我的 for 循环中出现奇怪的增量?
【发布时间】:2015-03-03 16:34:37
【问题描述】:

我一直在测试检查字符串中单个字符的数值的方法。我设置了一个遍历它们的 for 循环,但是当我将它记录到控制台时,我得到了一个奇怪的响应:

isNumeric: function(n){
    for(var i = 0; i < n.length; i++){
        console.log("Looping " + i+1);
    }
},

所以我传入了值"10" 来测试它。当我调用该函数时,我得到了一个奇怪的响应。我在控制台上得到了两个日志(如预期的那样),但它说

Looping 01
Looping 11

这里发生了什么?我不认为我在这里连接字符串,但由于某种原因它认为我是?我将 i 声明为整数var i = 0;,当你将它加一时,它在做什么?

我认为它必须做的唯一另一件事是记录附加到 Looping 0Looping 1 的其他内容,但我认为情况并非如此。

如果有人可以帮忙,这真的很困扰我,我似乎无法修复它。

提前致谢。

【问题讨论】:

    标签: javascript for-loop increment


    【解决方案1】:

    +left-to-right associative。表达式被评估为

    ('Looping ' + i) + 1
    

    现在是否更清楚为什么要执行字符串连接?如果+ 操作的两个操作数中的任何 是字符串,则执行字符串连接。 'Looping ' 是一个字符串,因此 'Looping ' + i 会产生一个字符串。

    要更改优先级或关联性,您必须使用分组“运算符” ((...))。

    【讨论】:

    • 啊,是的,这是有道理的。谢谢。
    【解决方案2】:

    你的意思是console.log("Looping " + (i+1)); “1”作为字符串附加。

    【讨论】:

      【解决方案3】:

      console.log("Looping " + i+1); 被从左到右解析为("Looping " + i) + 1。在正确的位置添加括号,它应该可以工作:

      console.log("Looping " + (i+1));
      

      【讨论】:

        【解决方案4】:

        您正在连接字符串,而不是添加数字。首先,i 的值被转换为字符串并连接到Looping,得到Looping 0。然后,将数字 1 转换为字符串并连接起来,得到您所看到的:Looping 01

        要获得您想要的结果,您只需将i+1 放在括号中即可。

        console.log("Looping " + (i+1));
        

        【讨论】:

          【解决方案5】:

          问题在于您进行实际记录的那一行:

          console.log("Looping " + i+1);
          

          首先发生"Looping " + i

          因为"Looping" 是一个字符串,所以i 被强制转换为一个字符串并附加到"Looping"

          结果:

          "Looping 0"

          然后,1 以相同的方式添加。

          "Looping 01"

          如果您想避免这种情况发生,请像这样使用括号:

          isNumeric: function(n){
              for(var i = 0; i < n.length; i++){
                  console.log("Looping " + (i+1));
              }
          },
          

          【讨论】:

            【解决方案6】:

            加上括号是对的,整个代码是:

            isNumeric: function(n){
                for(var i = 0; i < n.length; i++){
                    console.log("Looping " + (i+1));
                }
            },
            

            【讨论】:

              【解决方案7】:

              将您的结果与此进行比较:

              n=[1,2,3,4]
              
              function isnum(n){
                  for(var i = 0; i < n.length; i++){
                      console.log("Looping " + i+1);
                      console.log("Looping " + (i+1));
                  }
              }
              
              isnum(n);
              

              这会生成输出:

              Looping 01
              Looping 1
              Looping 11
              Looping 2
              Looping 21
              Looping 3
              Looping 31
              Looping 4
              

              在声明"Looping " + i+1 中发生的事情是"Looping " + i 首先发生,我被转换为与“循环”连接的字符串值。 1 也被转换为用于连接的字符串值。通过在 i+1 周围放置括号,我们可以强制 (i+1) 在连接之前首先作为加法发生,因此输出是您所期望的。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2010-12-25
                • 2019-02-11
                • 1970-01-01
                • 1970-01-01
                • 2013-10-23
                • 1970-01-01
                相关资源
                最近更新 更多