在if else语句中执行多个case的Javascript

时间:2012-04-23 12:57:58

标签: javascript

我对一些javascript有一个奇怪的问题。在下面的代码中,浏览器将在if,else if,else if条件中执行多个路径。因此,例如控制台将记录“a c”或“b c”。

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 });
        }
    }
}

2 个答案:

答案 0 :(得分:14)

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

删除分号

答案 1 :(得分:4)

此行上有一个尾随分号:

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

与说法相同:

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

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

因此,块c始终运行。