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

问题描述 投票:0回答:11

所以我使用简写 JavaScript

if
/
else
语句(我在某处读到它们被称为三元语句?)

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

这很好用,但如果以后我只想使用速记

if
,而不使用
else
部分,该怎么办?喜欢:

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

这可能吗?

javascript if-statement conditional-operator shorthand
11个回答
93
投票

您可以使用

&&
运算符 - 仅当第一个操作数表达式为 true 时才会执行第二个操作数表达式

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

在我看来,

if(conditon) expression
condition && expression

更具可读性

9
投票

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

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

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

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

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 程序员会在尝试维护代码时陷入困境)。


5
投票

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

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

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


5
投票

条件运算符是 not

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

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

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

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

3
投票

您可以使用

&&
运算符

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

2
投票

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

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

1
投票

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

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

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

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

这是一个理论。下次我有机会

+=
三元时,我会尝试这个。让我知道它是如何工作的!


1
投票

您可以使用以下简写:

if (condition) expression

0
投票

如果在某些情况下您确实想使用

if
简写。尽管这可能不是最好的选择,但这是可能的。

condition ? fireMe() : ""

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


0
投票

您可以使用短路评估简写。如果你想要 if 条件,只需写 else 条件即可。

let 
a = 2,
b = a !== 2 || 'ok';

console.log(b);


0
投票

我在简写 if 语句中遇到了这个问题,我刚刚通过在第三个操作数中放入 0 、 "" 或 null 来解决它。

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

© www.soinside.com 2019 - 2024. All rights reserved.