Javascript:如果表达式继续执行if作用域代码,则返回false

时间:2012-02-19 16:26:01

标签: javascript

我遇到了Javascript的一些最奇怪的行为。

即使if语句中的表达式求值为falseif 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屏幕截图:

Firebug

有什么想法吗?

2 个答案:

答案 0 :(得分:12)

尽管在Firebug中突出显示该行,您确定真的正在执行吗?我在Firebug(以及Chrome调试器的早期版本)中看到过这种行为,他们有时会突出显示一行代码,好像他们已经踩到它,而实际上没有执行该行。

所以我会在console.log("lwidth = " + lwidth);语句的正文中插入一些明确的内容(如if),看看是否真的执行。答案可能是Firebug只是突出显示/显示该行作为当前行,但实际上没有运行代码。

答案 1 :(得分:-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;

Firebug将踩到第1行和第2行,然后将步骤5行但不会增加变量a,b或c,它们将全部保持为0。

(p.s。无法评论..所以发布2013年额外细节的答案)