我遇到了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屏幕截图:
有什么想法吗?
答案 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年额外细节的答案)