我曾经听说,在一行语句中使用花括号对JavaScript是有害的。我不记得推理了,谷歌搜索也没有多大帮助。
在JavaScript中,把所有语句都用大括号括起来是一个好主意吗?
我这么问,因为似乎每个人都这么做。
我曾经听说,在一行语句中使用花括号对JavaScript是有害的。我不记得推理了,谷歌搜索也没有多大帮助。
在JavaScript中,把所有语句都用大括号括起来是一个好主意吗?
我这么问,因为似乎每个人都这么做。
当前回答
javascript有很多问题。看看JavaScript架构师Douglas Crockford谈论的if语句似乎很好,但return语句可能会引入一个问题。
return
{
ok:false;
}
//silent error (return undefined)
return{
ok:true;
}
//works well in javascript
其他回答
除了@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;
}
但也许这里的错误更容易检测(?)
有一个可读性方面-当你有复合语句时,它可能会非常混乱。缩进有帮助,但对编译器/解释器没有任何意义。
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
}
这种想法是这样的,如果你总是有括号,那么你就知道在这个块中插入其他语句。
有时他们似乎是需要的!我自己都不敢相信,但是昨天我在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;
很难找到。
No
但他们是被推荐的。如果你要展开你的陈述,你会需要它们。
这是完全有效的
if (cond)
alert("Condition met!")
else
alert("Condition not met!")
然而,强烈建议您总是使用大括号,因为如果您(或其他人)展开语句,就会需要它。
在所有带有括号的C语法风格语言中都遵循同样的做法。C, c++, Java,甚至PHP都支持不带括号的一行语句。你必须意识到你只保存了两个角色,有些人的支撑风格甚至连一行都没有保存。我更喜欢全括号的风格(像下面这样),所以它往往有点长。这种权衡很好地满足了代码可读性非常清晰的事实。
if (cond)
{
alert("Condition met!")
}
else
{
alert("Condition not met!")
}
不直接回答问题,但下面是关于一行中的if条件的简短语法
Ex:
var i=true;
if(i){
dosomething();
}
可以这样写:
var i=true;
i && dosomething();