44

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

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

这很好用,但是如果以后我只想使用简写if,而不使用该else部分怎么办。喜欢:

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

这可能吗?

4

9 回答 9

74

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

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

在我看来if(conditon) expressioncondition && expression

于 2012-07-19T05:42:09.747 回答
9

不要将其视为控制块(即:if-else 或开关)。它并不是真正用于在其中运行代码。

你可以。它变得非常丑陋,非常快,这违背了目的。

您真正想要使用它的是ASSIGNING VALUES

以你最初的例子为例,稍微改变一下,你会得到:

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

看。现在我所做的是我已经采取了一些需要 if/else 或 switch 的东西,这将被用来分配给那个值,我已经把它清理得很好很漂亮。

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

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

如果您愿意,您也可以使用它来触发代码,但是一段时间后就很难知道发生了什么(请参阅前面的示例,看看即使分配如何开始看起来很奇怪)...

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

...这通常会起作用。

但它并没有比 if 或分支、立即调用函数更漂亮或更有用(非 JS 程序员或未经训练的 JS 程序员会为了维护你的代码而自欺欺人)。

于 2012-07-19T05:44:28.130 回答
5

条件运算符不是if语句的简写。它是一个运算符,而不是一个语句。

如果使用它,则应将其用作运算符,而不是语句。

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

slideOffset += direction == "right" ? $(".range-slide").width() : 0;
于 2012-07-19T05:45:44.303 回答
3

你所拥有的将不起作用,但为什么不使用单行 if 语句来代替。

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

与 Ray 建议的方法相比,这涉及更少的输入。当然,如果您真的想坚持这种格式,他的回答是有效的。

于 2012-07-19T05:41:56.040 回答
2

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

first-operand ? second-operand (if first evaluates to true) : third-operand (if false)
于 2012-07-19T05:35:47.353 回答
1

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

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

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

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

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

于 2012-07-19T05:41:58.883 回答
1

你可以使用&&运算符

direction == "right" && slideOffset += $(".range-slide").width()
于 2020-11-19T10:52:35.120 回答
0

如果在某些情况下你真的想使用if速记。尽管它可能不是最好的选择,但它是可能的。

condition ? fireMe() : ""

看起来很奇怪,确实有效。在像 Vue 这样的框架中可能会派上用场,您可以在模板中编写它。

于 2021-11-29T15:50:27.847 回答
0

您可以使用以下速记:

if (condition) expression
于 2021-09-15T02:01:17.747 回答