javascript简写if语句,没有else部分

时间:2012-07-19 05:32:05

标签: javascript if-statement shorthand shorthand-if

所以我正在使用简写的javascript if / else语句(我在某处读到它们被称为三元语句?)

this.dragHandle.hasClass('handle-low') ? direction = "left" : direction = "right"

这很好用,但如果以后我只想使用简写if而没有else部分会怎样。像:

direction == "right" ? slideOffset += $(".range-slide").width()

这有可能吗?

7 个答案:

答案 0 :(得分:39)

您可以使用&&运算符 - 仅当first为真时才执行第二个操作数表达式

direction == "right" && slideOffset += $(".range-slide").width()
在我看来,

if(conditon) expressioncondition && expression

更具可读性

答案 1 :(得分:9)

不要把它想象成一个控制块(即:if-else或switch)。 它并不意味着在其中运行代码。

你可以。它变得非常丑陋,速度非常快,无法达到目的。

您真正想要使用的是 分配价值

以你最初的例子并稍微转过头来看,你得到:

direction = (this.dragHandle.hasClass("handle-low")) ? "left" : "right";

请参阅。现在我所做的是我已经采取了一些需要if / else或开关的东西,它本来用于分配给那个值,而且我已经把它清理得很漂亮。

你甚至可以做一个else-if类型的三元:

y = (x === 2) ? 1 : (x === 3) ? 2 : (x === 4) ? 7 : 1000;

如果你愿意的话,你也可以使用它来解雇代码,但是一段时间之后就会变得非常困难,要知道发生了什么(请参阅前面的例子,看看甚至分配如何开始看起来很奇怪) ...

((this.dragHandle.hasClass("...")) ? fireMe(something) : noMe(somethingElse));

......这通常会奏效。

但它并不比if或分支,立即调用函数(和非JS程序员,或未经训练的JS程序员试图维护你的代码而废弃自己)更漂亮或更有用。

答案 2 :(得分:3)

条件运算符不是 if语句的简写。这是一个运营商,而不是一个声明。

如果您使用它,则应将其用作运算符,而不是声明。

对第三个操作数使用零值:

slideOffset += direction == "right" ? $(".range-slide").width() : 0;

答案 3 :(得分:2)

不,这是不可能的,因为三元运算符需要三个操作数。

first-operand ? second-operand (if first evaluates to true) : third-operand (if false)

答案 4 :(得分:2)

你所拥有的东西是行不通的,但为什么不使用一行if语句呢。

if(direction == "right") slideOffset += $(".range-slide").width();

这比Ray建议的方法更少打字。当然,如果你真的想坚持这种格式,他的答案是有效的。

答案 5 :(得分:1)

这并不能完全回答你的问题,但是三元允许你写的比你所展示的要少:

direction = this.dragHandle.hasClass('handle-low') ? "left" : "right";

现在我想起来了,是的,你也可以提出你的问题:

slideOffset + direction == "right" ? = $(".range-slide").width() : = 0;

这是一个理论。下次我有机会+=三元时我会尝试这个。让我知道它是如何工作的!

答案 6 :(得分:1)

您可以使用&&运算符

direction == "right" && slideOffset += $(".range-slide").width()