所以我正在使用简写的javascript if
/ else
语句(我在某处读到它们被称为三元语句?)
this.dragHandle.hasClass('handle-low') ? direction = "left" : direction = "right"
这很好用,但如果以后我只想使用简写if
而没有else
部分会怎样。像:
direction == "right" ? slideOffset += $(".range-slide").width()
这有可能吗?
答案 0 :(得分:39)
您可以使用&&
运算符 - 仅当first为真时才执行第二个操作数表达式
direction == "right" && slideOffset += $(".range-slide").width()
在我看来, if(conditon) expression
比condition && 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()