JavaScript简写if语句,不包含else部分

JavaScript shorthand if statement, without the else portion

本文关键字:包含 else 部分 简写 if 语句 JavaScript      更新时间:2023-11-13

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

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

这很好,但如果以后我只想使用缩写if,而不使用else部分,该怎么办。类似:

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

这可能吗?

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

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

在我看来,if(conditon) expressioncondition && expression 可读性更强

不要把它看作一个控制块(即:if-else或开关)。它并不是真正用来运行里面的代码的

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

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

以你最初的例子为例,稍微颠倒一下,你就会得到:

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

请参阅。现在我所做的是,我已经取了一些需要if/else或开关的东西,这些东西本来可以用来分配给那个值,我已经很好地清理了它。

你甚至可以做一个其他if类型的三元:

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

如果你愿意的话,你也可以用它来激发代码,但过一段时间后,要知道发生了什么真的很困难(请参阅前面的例子,看看即使是分配也会一眼看起来很奇怪)。。。

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

这通常会起作用。

但它并没有比if或分支、立即调用函数更漂亮或更有用(非JS程序员或未经培训的JS程序员会在维护代码时自讨苦吃)。

您所拥有的不会起作用,但为什么不使用一行if语句呢。

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

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

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

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

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

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

您可以使用&&运算符

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

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

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

这并不能完全回答你的问题,但ternaries允许你写的东西比你显示的要少:

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

现在我想一想,是的,你也可以问你的问题:

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

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

您可以使用以下简写:

if (condition) expression

如果在某些情况下您真的想使用if简写。尽管这可能不是最好的选择,但这是可能的。

condition ? fireMe() : ""

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

您可以使用短路评估Shorthand。如果你想要if条件,就写else条件。

let 
a = 2,
b = a !== 2 || 'ok';
console.log(b);