我曾经听说,在一行语句中使用花括号对JavaScript是有害的。我不记得推理了,谷歌搜索也没有多大帮助。
在JavaScript中,把所有语句都用大括号括起来是一个好主意吗?
我这么问,因为似乎每个人都这么做。
我曾经听说,在一行语句中使用花括号对JavaScript是有害的。我不记得推理了,谷歌搜索也没有多大帮助。
在JavaScript中,把所有语句都用大括号括起来是一个好主意吗?
我这么问,因为似乎每个人都这么做。
当前回答
我目前正在做一个迷你器。即使是现在,我也要检查两个大脚本。通过实验,我发现: 如果花括号不包括';','return','for','if','else','while',' function',则可以删除后面的花括号。不考虑换行。
function a(b){if(c){d}else{e}} //ok
function a(b){if(c)d;else e} //ok
当然,如果后面没有其他的结束大括号,则需要用分号替换结束大括号。
函数不能以逗号结尾。
var a,b=function()c; //ok *but not in Chrome
var b=function()c,a; //error
在Chrome和FF上测试。
其他回答
这个问题问的是一行中的语句。然而,提供的许多示例说明了不要基于多行语句省略大括号的理由。在一行中不使用括号是完全安全的,如果这是您喜欢的编码风格的话。
例如,问题问这样做是否可以:
if (condition) statement;
它不会问这是否ok:
if (condition)
statement;
我认为去掉括号更可取,因为它使代码更具可读性,语法更少。
我的编码风格是永远不用括号,除非代码是一个块。不要在一行上使用多个语句(用分号分隔)。我发现这很容易阅读和清楚,从来没有“if”语句的范围问题。因此,在单个if条件语句上使用括号需要3行。是这样的:
if (condition) {
statement;
}
使用一行if语句更可取,因为它使用的垂直空间更少,代码更紧凑。
我不会强迫其他人使用这种方法,但它对我来说是有效的,我非常不同意所提供的关于省略括号如何导致编码/范围错误的例子。
有时他们似乎是需要的!我自己都不敢相信,但是昨天我在Firebug会议上(最近的Firefox 22.0)突然想到
if (! my.condition.key)
do something;
执行do something,尽管my。condition。key为true。添加括号:
if (! my.condition.var) {
do something;
}
解决了这个问题。有无数的例子表明,它显然可以在没有括号的情况下工作,但在这种情况下,它肯定没有。
倾向于在一行中放入多个语句的人当然应该总是使用大括号,因为
if (condition)
do something; do something else;
很难找到。
有一个可读性方面-当你有复合语句时,它可能会非常混乱。缩进有帮助,但对编译器/解释器没有任何意义。
var a;
var b;
var c;
//Indenting is clear
if (a===true)
alert(a); //Only on IF
alert(b); //Always
//Indenting is bad
if (a===true)
alert(a); //Only on IF
alert(b); //Always but expected?
//Nested indenting is clear
if (a===true)
if (b===true)
alert(a); //Only on if-if
alert (b); //Always
//Nested indenting is misleading
if (a===true)
if (b===true)
alert(a); //Only on if-if
alert (b); //Always but expected as part of first if?
//Compound line is misleading
//b will always alert, but suggests it's part of if
if (a===true) alert(a);alert(b);
else alert(c); //Error, else isn't attached
然后是可扩展性方面:
//Problematic
if (a===true)
alert(a);
alert(b); //We're assuming this will happen with the if but it'll happen always
else //This else is not connected to an if anymore - error
alert(c);
//Obvious
if (a===true) {
alert(a); //on if
alert(b); //on if
} else {
alert(c); //on !if
}
这种想法是这样的,如果你总是有括号,那么你就知道在这个块中插入其他语句。
不直接回答问题,但下面是关于一行中的if条件的简短语法
Ex:
var i=true;
if(i){
dosomething();
}
可以这样写:
var i=true;
i && dosomething();
除了@Josh K提到的原因(这也适用于Java, C等),JavaScript中的一个特殊问题是自动分号插入。维基百科的例子如下:
return
a + b;
// Returns undefined. Treated as:
// return;
// a + b;
因此,如果像这样使用,也可能会产生意想不到的结果:
if (x)
return
a + b;
写也没好到哪里去
if (x) {
return
a + b;
}
但也许这里的错误更容易检测(?)