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

ahr*_*ren 36 javascript if-statement shorthand-if shorthand

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

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

这很好用,但如果以后我想只使用一个速记if,没有这个else部分会怎样.喜欢:

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

这有可能吗?

And*_*rov 45

你可以使用&&operator - 只有当first为真时才执行第二个操作数表达式

direction == "right" && slideOffset += $(".range-slide").width()
Run Code Online (Sandbox Code Playgroud)

在我看来if(conditon) expression比可读性更强condition && expression

  • 可能会坚持使用 `if(condition) 表达式` - 但很高兴知道 `&&` 运算符在这种情况下有效! (2认同)

Nor*_*ard 9

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

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

你真正想要用它的是分配价值.

以你最初的例子并将它转过头来,你会得到:

direction = (this.dragHandle.hasClass("handle-low")) ? "left" : "right";
Run Code Online (Sandbox Code Playgroud)

看到.现在我所做的是我已经采取了一些需要if/else或者开关的东西,这本来可以用来分配给那个值,而且我已经把它清理干净了.

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

y = (x === 2) ? 1 : (x === 3) ? 2 : (x === 4) ? 7 : 1000;
Run Code Online (Sandbox Code Playgroud)

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

((this.dragHandle.hasClass("...")) ? fireMe(something) : noMe(somethingElse));
Run Code Online (Sandbox Code Playgroud)

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

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


twi*_*wiz 5

你所拥有的将不起作用,但为什么不直接使用一行 if 语句呢?

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

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


Guf*_*ffa 5

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

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

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

slideOffset += direction == "right" ? $(".range-slide").width() : 0;
Run Code Online (Sandbox Code Playgroud)