【问题标题】:javascript for (i = 0; i < XXX.length; i++) -> length questionjavascript for (i = 0; i < XXX.length; i++) -> 长度问题
【发布时间】:2010-05-27 15:31:01
【问题描述】:
for (m = 0; m < troopsCount.length; m++) {

                //FM_log(7,"i="+i+" m="+m);
                //FM_log(7,"tipoTropaPrioritaria[m] = "+tipoTropaPrioritaria[m]);
                //FM_log(7,"troopsCount[m] = "+troopsCount[m]);
                //FM_log(7,"availableTroops[m] = "+availableTroops[m]);

                if ((tipoTropaPrioritaria[m] == null || tipoTropaPrioritaria[m] == "undefined")
|| (troopsCount[m] == null || troopsCount[m] == "undefined") ||
(availableTroops[m] == null || availableTroops[m] == "undefined")) 
                    return "alternaTropas(): ERRO - tipoTropaPrioritaria[m] || troopsCount[m] || availableTroops[m] null ou undefined";

                if ((parseInt(tipoTropaPrioritaria[m]) != 0) && (parseInt(troopsCount[m]) != 0)) {
                    naoServe = true;
                    break;
                }
                else {
                    if ((parseInt(availableTroops[m])) < (parseInt(troopsCount[m]))) {
                        naoServe = true;
                        break;
                    }
                    else if (m < troopsCount.length) {
                        naoServe = true;
                    }
                    else { //means m >= troopsCount.length
                        naoServe = false;
                    }
                }
}

我的问题是:最后的陈述

else { //means m >= troopsCount.length
    naoServe = false;
}

以后会不会被评估

for (m = 0; m

???

【问题讨论】:

  • 你确定"undefined"?不是undefined
  • 你真的应该用“var”声明“m”:for (var m = 0; ... )
  • 我看到您尝试检查nullundefined,实际上您已经在通过使用等于运算符与null 进行比较(foo == null; 就足够了),因为@ 987654330@ 和null == undefined;...

标签: javascript controls loops


【解决方案1】:

不,它不会被执行,假设 mtroopsCount 没有在循环本身中被修改(在这个例子中它们似乎没有被修改)。

我相信您会指出,如果循环开始时m 大于或等于troopsCount.length,则循环的条件将阻止循环再次运行。

【讨论】:

  • ...或者 troopsCount 也没有被修改。
【解决方案2】:

不。它不应该发生。

一旦m &lt; troopsCount.length 为假,循环立即停止。因此,m &gt;= troopsCount.length 在循环内永远不会为真,除非您在循环内更改其值(在此示例中您没有更改)。

【讨论】:

    【解决方案3】:

    没有。只要m &lt; troopsCount.length,循环就会被评估。所以m 永远不会是&gt;= troopsCount.length,只要你不在循环内修改mtroopsCount.length

    【讨论】:

      【解决方案4】:

      假设troopsCount.length = 10

      当 m = 9 时,它将正确执行循环中的所有代码,但当 m = 10 时,它不会执行任何操作。

      所以如果我这样改变它:

                  else {
                      if ((parseInt(availableTroops[m])) < (parseInt(troopsCount[m]))) {
                          naoServe = true;
                          break;
                      }
                      else if (m < (troopsCount.length - 1)) { // troopsCount.length - 1 = 9, m < 9 = m from 0 to 8
                          naoServe = true;
                      }
                      else { // troopsCount.length = 9
                          naoServe = false;
                      }
                  }
              }
      

      它会起作用的,对吧?

      【讨论】:

      • 您可能应该编辑(或添加评论)您的原始问题,而不是将此问题作为答案发布。
      • 因为我假设另一个条件(troopsCount.length = 10),我发现发布我的问题的答案更时尚,因为它确实是我问题的答案,只是在等待某人比我有更多的知识来确认我的想法是否正确。
      猜你喜欢
      • 1970-01-01
      • 2019-06-25
      • 2011-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多