在JavaScript中,空真块是成语吗?

时间:2011-08-24 17:38:17

标签: javascript

我刚遇到的代码如下:

if (foo == "bar"){}else{
}

是否有充分的理由让某人以这种方式而不是

来编写
if (foo != "bar") {
}

或者我只是在处理一个狂热的疯子(这是我基于代码中其他内容的假设)。

7 个答案:

答案 0 :(得分:11)

<强> [编辑]

JavaScript社区中没有这样的约定。这只是糟糕的代码。

[原创“答案”下方]

我在离开项目时更喜欢使用以下语法:

if (foo == "bar") {               /* 100 or so spaces */ } else {
}

} else {段有望被文本编辑器遮挡屏幕,因此代码与它看起来完全相反。这样我就可以确保剩下的开发团队诅咒我的名字,并且永远不会考虑我将来的开发或支持。 = d

答案 1 :(得分:4)

我不明白为什么JavaScript代码在这方面应该与任何C-heritage语言不同。我之前没有遇到过这个成语,我真的不喜欢它。我需要精神上解析两件事,以确保我理解。

我能想到的唯一模拟是switch语句中的空缺省,并且有大量的评论说“我考虑过这个问题并且没关系。”

答案 2 :(得分:3)

如果我的一个开发人员以这种方式编写代码,我会用一个谴责和一份“Javascript:The Good Parts”将它扔回去。我无法想到这样做的一个好理由。

此外,他们应该将他们的比较写为if (foo === "bar")。更好的做法。

编辑一年半之后:

出于无聊,我敲了一个jsperf只是为了看看OP中显示的两种方法之间是否有明显的性能差异,而 [SPOILER WARNING] 没有。

http://jsperf.com/empty-blocks-in-if-else-statement

答案 3 :(得分:3)

我以前做过。

这时我可能想要稍后添加一些调试语句。

确定他可以做到

if (foo != "bar"){
   //something
}else{} 

但这不是一回事吗?


回到你看到的代码。

所以程序员可能做的是:

if (foo == "bar"){}
else{/*something*/}

然后,当他想在第一部分添加一些调试信息时,他会 逻辑仍然有效,并没有任何缺陷。 (在我看来)

答案 4 :(得分:2)

由于两个原因令人困惑。语法令人困惑,因为他正在评估foo == bar只是为了......什么都没做?似乎没有必要不使用您建议的语法。在视觉上它也令人困惑,因为空块和if评估在一行上,所以如果我稍后阅读这段代码,我可能会掩饰一些事情并假设该语句为

if (foo == "bar"){
}

这与代码的意图完全相反。一个可能的解释是,程序员打算返回并为foo == bar实现一些代码,但要么没有,要么忘记这样做。

我的投票是疯子。

答案 5 :(得分:1)

没有充分的理由这样做。

但请注意,请注意,使用循环时,有时可能会出现空块:

var i;
for (i = 0; document.getElementById("box" + i).value != ""; i++) { }
// do something with i

答案 6 :(得分:0)

我倾向于像这样编写链式if

if (a) {
} else if (b) {
    // do something
} else if (c) {
    // do something
} else if (d) {
    // do something
}

而不是:

if (!a) {
    if (b) {
        // do something
    } else if (c) {
        // do something
    } else if (d) {
        // do something
    }
}

这使代码更加整洁IMO。

有意义吗?