空的真块是JavaScript中的惯用法吗?

空的真块是JavaScript中的惯用法吗?,javascript,Javascript,我刚刚遇到的代码如下所示: if (foo == "bar"){}else{ } if (a) { } else if (b) { // do something } else if (c) { // do something } else if (d) { // do something } 有没有一个很好的理由让别人这样写而不是 if (foo != "bar") { } 或者我只是在对付一个疯狂的疯子(这是我基于代码中其他内容的假设)。如果我的一个开发人员以这

我刚刚遇到的代码如下所示:

if (foo == "bar"){}else{
}
if (a) {
} else if (b) {
    // do something
} else if (c) {
    // do something
} else if (d) {
    // do something
}
有没有一个很好的理由让别人这样写而不是

if (foo != "bar") {
}

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

如果我的一个开发人员以这种方式编写代码,我会斥责他们并抄送一份“Javascript:好的部分”。我想不出一个好的理由来这么做

此外,他们应该将比较写为
if(foo==“bar”)
。更好的练习

一年半后编辑:

出于厌倦,我拼凑了一个jsperf,只是想看看OP中显示的两种方法之间是否有任何明显的性能差异,[扰流板警告]没有


我不明白为什么JavaScript代码在这方面应该与任何C-heritage语言有所不同。我以前从未遇到过这个成语,我真的不喜欢它。我需要在心里分析两次,以确保我理解了


我能想到的唯一类似情况是switch语句中的一个空默认值,并有大量的注释说“我考虑过这个,它很好。”

没有很好的理由这样做

但另一方面,请记住,对于循环,有时空块是可以接受的:

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

这就是我以后可能要添加一些调试语句的时候

是的,他肯定能做到

if (foo != "bar"){
   //something
}else{} 
但这不是一回事吗


回到你看到的代码

所以程序员可能做的是:

if (foo == "bar"){}
else{/*something*/}
后来,当他想在第一部分中添加一些调试信息时,他会这样做。

这一逻辑仍然有效,丝毫没有缺陷。(在我看来)

有两个原因让人困惑。语法很混乱,因为他计算foo==bar只是为了。。。没有什么?似乎没有必要不使用您建议的语法。从视觉上看,它也很混乱,因为空块和if求值在一行上,所以如果我稍后阅读这段代码,我可能会掩盖一些东西,并假设语句读作

if (foo == "bar"){
}
这与守则的意图正好相反。一种可能的解释是,程序员打算返回并实现foo==bar的一些代码,但要么没有,要么忘了这么做


我投给疯子的票。

[编辑]

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

[下面的原始“答案”]

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

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

< > >代码>否则,{ /代码>段希望被文本编辑器遮挡掉,这样代码就与它看起来完全相反。这样我就可以确保剩下的开发团队诅咒我的名字,永远不会考虑我将来的开发或支持。
if (foo == "bar"){}else{
}
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
    }
}
这使得代码更加整洁



这有意义吗?

是的,很奇怪。而且
!=
!=
更受欢迎。看起来像是DailyWTF博客的候选人。我不能说我以前没有这样做过……在我们的代理机构,我们经常与第三方合作进行项目。我偶尔会收到糟糕的代码(项目加载整个jQueryUI库,一次使用其中的一种方法,糟糕的优化循环,等等),我毫不犹豫地将其发送回提供商。我的立场是,如果可以避免的话,我不会将我的公司名称附加到劣质工程上。从您的“基于代码中其他内容的假设”中听起来这可能是一种需要打电话给第三方技术总监并与他们讨论代码质量的情况。我只需要为(I=0;document.getElementById(“box”+I).value!=“”;I++);编写
,并使用分号。而不是空块…我更喜欢使用分号而不是空块,例如(…)实际上,JavaScript是C++、Stuty、java、perl、python、java的继承。主要是方案自我和java。当然,还有一个通过Java、C++和C的继承——当然还有其他的祖先。if(){}} {}当然看起来很像C!作为一个拥有大量Perl经验的动态程序员,我不得不问,为什么我要关心
foo
的类型?如果它强制为
“bar”
,那么它就是
“bar”
就我的目的而言。我可以看出它在其他场景中是多么有用,但是为什么我应该使用
===
作为一般规则呢?在这种特定情况下,使用
=
是可以的,但是关于如何
=
!=
强制不同类型的值的规则有很多不规则和不一致之处(例如,
0=='0'
解析为true,但
false=='false'
解析为false)我同意你的说法,但在这种情况下,开发人员真的应该在空白的第一部分中添加一条注释,表示调试语句或其他即将出现的代码,哪怕只是为了保护可能同时查看其代码的任何其他开发人员的理智。@Scottie,我们不这样做如果知道OP的情况是什么,他可能会接手一个程序员,他被解雇了,没有想到其他人会仔细检查他或她的代码。公平地说,我的陈述肯定是在做假设。有人想解释一下
-1
?这个答案旁边看起来不错:-这不是我写的,所以我+1你来解释补偿(既然我同意你的回答,我本来应该这么做的)。
+1
只是为了它的邪恶(这是一个词吗?^ ^这与问题有什么关系?@BoltClock:这是一个可能可以接受的空块的例子。我写这篇文章是因为很多人似乎