如何将两个JavaScript语句合并成一个?

4
有时我希望将两个语句组合成一个,以便在条件语句中省略花括号。例如,在PHP中,可以这样写:
if ($direction == 'south-east') {
    $x++;
    $y++;
    }

我会写

if ($direction == 'south-east') $x++ and $y++;

但是有没有一种方法可以在JavaScript中实现呢?写 x++ && y++ 似乎不起作用。


1
在我看来,也是大多数人的看法,那是一种糟糕的风格。我认为当你有多个语句要在花括号中执行时,应该始终使用花括号。 - thatidiotguy
2
拥抱括号……括号是你的朋友。如果不是你的朋友,那么它也是下一个试图阅读你代码的人的朋友。 - Shaded
1
这就是为什么我们有括号的原因,我的朋友。 - asawyer
3
所有这些“hack”的问题在于它们都是“hack”,它们隐藏了代码的目的,并且可能在特定条件下隐藏了漏洞。 - Denys Séguret
1
嗯,Joseph的回答对我来说并不像是一个hack,而且在我的代码中,我有许多这样的条件语句一个接一个地写,将它们写在一行中可以节省很多空间,如果我不必使用花括号(至少对我来说),那么这样做更好看,所以我不明白为什么我的问题会被downvote。似乎在这里大家对花括号有强烈的感觉。 - Sophivorus
显示剩余4条评论
3个回答

12

似乎不起作用。无论条件如何,语句都会被执行...我有什么遗漏吗?http://jsfiddle.net/knMS2/2/ - Cypher
@Cypher - 在那里,你已经将“y”硬编码为“2”。它实际上没有递增。 - Joseph Silber
@Cypher - 感谢提供链接。已将其添加到答案中。 - Joseph Silber

1

你可以这样做:

var x = 0,
    y = 0,
    cond = true;

if (cond) ++x && ++y;

注意:如果 x 是 -1,则此方法无效;
或者不使用 if
cond && ++x && ++y;

那么你的代码应该是这样的:

if ($direction == 'south-east') $x++ && $y++;

请注意,++ 运算符在变量后面,这意味着如果 $x0,它将无法工作。

++x 如果 x 是 -1,则返回假
x++ 如果 x 是 0,则返回假


2
使用 ^+ 或几乎任何没有快捷方式的东西。 - Oleg V. Volkov
就像Oleg所说,如果第一个条件为false,&&将会中断。你可以使用&来检查两个条件。或者使用他所提到的其他运算符。 - Shaded
@Shaded - 在我看来,逗号仍然更简单(因为它不是一种hack技巧)。 - Joseph Silber
@JosephSilber 我同意,没有必要评估一个条件。我不知道在JavaScript中逗号可以这样使用,出于某种原因我之前没看到你的答案。 - Shaded
@Shaded - 我暂时删除了它,因为Cypher让我对自己产生了一些怀疑。现在我们又正常运行了 :) - Joseph Silber
这个答案是可行的,但只适用于这个例子,而不是一般情况。 - Sophivorus

1

{ } 是一个代码块,可以将多个语句组合在一起,并且可以与任何流程控制语句一起使用。你可以将整个代码块放在一行上 - 在这种情况下,JS 不会关心空格。


1
这可能是一条注释。请查看其他的。 - Denys Séguret
2
@dystroy,如果它也是一个答案,为什么我不应该这样做呢? - Oleg V. Volkov
1
我知道,这并没有回答我的问题。 - Sophivorus
1
@LFS,这是你问题的唯一正确答案。你不能以任何其他方式可靠地组合任意语句。每个其他答案都会给出可能根据其内容正确或不正确工作的表达式。 - Oleg V. Volkov
只是一个评论,支持Oleg作为正确答案。发布主要是为了其他人的参考。在我看来,这里发布的所有其他花招都有潜在的灾难性缺陷,而且形式极其糟糕。我认为Oleg在帖子中表达的意思是你可以使用括号进行单行操作。这就是他想说的。 - Courtney Foster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接