2012-02-19 40 views
5

我遇到一些JavaScript的怪异行为的执行。的Javascript:如果假表达式继续,如果范围的代码

即使if语句中的表达式计算结果为false,我的if block中的代码仍在执行。

这里是代码片段:

if (view.leftCols !== null) { 
    var leftCols = view.leftCols.split(','); 

    for (var lc = 0; lc < leftCols.length; lc++) { 
     var lcv = leftCols[lc].split(':'); 
     var lcol = lcv[0]; 

     Array.add(allCols, lcol); 

     try { 
      var lwidth = lcv[1] - MyWorkGrid.getColWidth(lcol); 

      if (lcol === 'Edit') { 
       if ($.browser.msie && parseInt($.browser.version) <= 8) { 
        lwidth = 23; 
       } 
      } 

      // this if statement fails. 
      if (lwidth > 0) { 
       grid.SetWidth(lcol, lwidth); 
      } 
     } catch (e) { 
     } 

     grid.MoveCol(lcol, 0, 1, 1); 
    } 
} 

这里是我的萤火虫截图:

Firebug

任何想法?

+1

你说会发生什么事真的不可能发生,所以你最好职位的代码。该截图难以辨认。 – Pointy 2012-02-19 16:28:04

+1

难以理解的截图,请。提供代码以及在“if”中使用的变量的当前值。哦,顺便说一下,这是*总*在电脑前的人,我发现我自己一遍又一遍:) – 2012-02-19 16:28:40

+1

只是一个假设,但也许萤火虫已经高速缓存了脚本的版本,并且你在看它在你一步一步执行时并不是实际正在执行的内容...... – 2012-02-19 16:34:04

回答

12

尽管线被聚焦在Firebug,你确定这是真的正在执行?我在Firebug(以及Chrome调试器的早期版本)中看到过这种行为,他们有时会突出显示一行代码,好像他们已经走到了一起,而没有真正执行该行。

所以我想插入一些明确的(如console.log("lwidth = " + lwidth);if语句的身体,看它是否真的执行,答案可能是萤火虫只是强调/显示该行作为当前一个错误,而不码在其上实际正在运行。

+3

是的。该工具被称为FireBUG的原因... – user123444555621 2012-02-19 16:42:14

+0

你是对的。如果我在if语句中设置断点。当lwidth <= 0时,它永远不会到达......上帝帮助Firebug! – Moon 2012-02-19 16:44:05

+0

@Moon:我很高兴就是这样。如果您有一个复制问题的简单测试用例,可能值得[举报](http://code.google.com/p/fbug/issues/list)。如果几年前我看到它的时候(我没有使用过Firebug一段时间),也许你现在就不会碰到它。 (对不起。):-) – 2012-02-19 16:48:17

-1

这只是正被突出显示的所述码块的最后一行。如在突出显示的行上述接受的答案注意到实际上不执行。

1* var a=0;b=0;c=0; 
2* if(false){ 
3>  a++; 
4>  b++; 
5*  c++; 
6> } 
7> 
8* console.log(a+b+c); // will output 0; 

萤火虫将踩线的1和2,然后将步骤5号线,但将不会递增变量a,b或c,他们都将保持为0

(P.S.不能发表评论..所以发布答案与额外的细节2013年)

+0

什么?我不知道你为什么说你说的话! – Moon 2013-05-18 04:12:15

+0

对不起..这是一年后,但我曾想过其他人可能碰到同样奇怪的firebug行为。我有......并且接受的答案帮助我意识到代码并未实际执行......只是突出显示。这是我第一次发布和stackoverflow不会让我评论,所以这可能是你困惑。 – JJones 2013-12-03 11:06:28

相关问题