我刚遇到的代码如下:
if (foo == "bar"){}else{
}
是否有充分的理由让某人以这种方式而不是
来编写if (foo != "bar") {
}
或者我只是在处理一个狂热的疯子(这是我基于代码中其他内容的假设)。
答案 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] 没有。
答案 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。
有意义吗?