尽管有观点认为,在单行if语句中放弃花括号对于可维护性和可读性来说并不理想。

但是这个呢?

if (lemons) { document.write("foo gave me a bar"); }

它甚至更加压缩,如果展开,花括号也不会被忘记。是否存在明显的问题,如果没有,考虑的因素是什么?我觉得它还是很有可读性的,至少和三元运算符一样。在我看来,由于可读性,三元运算符不太被建议,尽管我觉得这个结论并不是很一致。

我内心的邪恶双胞胎想要建议这一点,尽管语法显然不是为它而设计的,而且可能只是一个坏主意。

(syntax) ? document.write("My evil twin emerges"): "";

当前回答

如前所述,你可以使用:

& &风格

lemons && document.write("foo gave me a bar");  

or

bracket-less风格

if (lemons) document.write("foo gave me a bar");

短路返回

然而,如果你希望使用一行If语句来短路一个函数,你需要使用无括号的版本,如下所示:

if (lemons) return "foo gave me a bar";

as

lemons && return "foo gave me a bar"; // does not work!

将给你一个SyntaxError: Unexpected关键字'return'

其他回答

就像很多人说的,如果你在寻找一个实际的1行,那么:

    if (Boolean_expression) do.something();

者优先。然而,如果你想做一个if/else,那么三元是你的朋友(也是超级酷):

    (Boolean_expression) ? do.somethingForTrue() : do.somethingForFalse();

另外:

    var something = (Boolean_expression) ? trueValueHardware : falseATRON;

然而,我看到了一个非常酷的例子。向@Peter-Oslson大喊&&

    (Boolean_expression) && do.something();

最后,它不是一个if语句,但在循环中执行map/reduce或Promise.resolve()也很有趣。向@brunettdan喊话

箭头函数示例:

let somethingTrue = true
[1,2,3,4,5].map(i=>somethingTrue && i*2)

在承诺:

Promise.resolve()
  .then(_=>checkTrueFalse && asyncFunc())
  .then(_=>{ .. })

否则:

if(somethingTrue) thenDo()

如果它只是一个简单的条件句,我更喜欢尽可能使用If (value),因为在语句开头的If这个词比旁听和问号更能说明正在发生的事情。

可以用这个,

lemons ? alert("please give me a lemonade") : alert("then give me a beer");

解释:如果柠檬为真,那么alert(“请给我一杯柠檬水”),如果不为真,alert(“那给我一杯啤酒”)

//另一个简单的例子

 var a = 11;
 a == 10 ? alert("true") : alert("false");

我是这样使用的:

(lemons) ? alert("please give me a lemonade") : alert("then give me a beer");