2012-04-23 34 views
1

我對一些javascript有一個好奇的問題。在以下代碼中,瀏覽器將在if,else if,else if條件中執行多條路徑。例如,控制檯會記錄「a c」或「b c」。JavaScript在if語句中執行多個case

if (divs[i].row == hover_div.row && divs[i].obj != hover_div.obj) 
{ 
    console.log("a"); 
    divs[i].obj.stop() 
     .animate({'width':d_thin}, { duration:600, queue:false }) 
     .animate({'height':d_expand}, { duration:600, queue:false }); 
} 
else if (divs[i].col == hover_div.col && divs[i].obj != hover_div.obj) 
{ 
    console.log("b"); 
    divs[i].obj.stop() 
     .animate({'width':d_expand}, { duration:600, queue:false }) 
     .animate({'height':d_thin}, { duration:600, queue:false }); 
} 
else if (divs[i].obj != hover_div.obj); 
{ 
    console.log("c"); 
    divs[i].obj.stop() 
     .animate({'width':d_thin}, { duration:600, queue:false }) 
     .animate({'height':d_thin}, { duration:600, queue:false }); 
} 

我已經檢查過,通過在塊之外添加計數器,代碼沒有執行兩次。如果我嵌入if語句如下,整個事情都可以正常工作,但我不應該這樣做嗎?

if (divs[i].row == hover_div.row && divs[i].obj != hover_div.obj) 
{ 
    console.log("a"); 
    divs[i].obj.stop() 
     .animate({'width':d_thin}, { duration:600, queue:false }) 
     .animate({'height':d_expand}, { duration:600, queue:false }); 
} 
else { 
    if (divs[i].col == hover_div.col && divs[i].obj != hover_div.obj) 
    { 
     console.log("b"); 
     divs[i].obj.stop() 
      .animate({'width':d_expand}, { duration:600, queue:false }) 
      .animate({'height':d_thin}, { duration:600, queue:false }); 
    } 
    else { 
     if (divs[i].obj != hover_div.obj); 
     { 
      console.log("c"); 
      divs[i].obj.stop() 
       .animate({'width':d_thin}, { duration:600, queue:false }) 
       .animate({'height':d_thin}, { duration:600, queue:false }); 
     } 
    } 
} 
+0

你讓你的問題好奇 – 2012-04-23 13:07:04

+0

爲什麼不只是調試它? – vals 2013-01-31 14:07:04

回答

14
else if (divs[i].obj != hover_div.obj); // <-- 

刪除分號

+0

爲此歡呼。有時候無法仔細閱讀代碼! – unfrev 2012-04-23 13:23:47

4

您有這條線尾隨分號:

else if (divs[i].obj != hover_div.obj); 

這是相同的話說:

else if (...) { 
    // do nothing 
} 

{ 
    console.log("c"); 
    ... 
} 

因此C座總是運行。

+0

+1用於解釋爲什麼分號不正確。 – ShiningLight 2014-05-29 20:43:15