所以我使用简写 JavaScript
if
/else
语句(我在某处读到它们被称为三元语句?)
this.dragHandle.hasClass('handle-low') ? direction = "left" : direction = "right"
这很好用,但如果以后我只想使用速记
if
,而不使用 else
部分,该怎么办?喜欢:
direction == "right" ? slideOffset += $(".range-slide").width()
这可能吗?
您可以使用
&&
运算符 - 仅当第一个操作数表达式为 true 时才会执行第二个操作数表达式
direction == "right" && slideOffset += $(".range-slide").width()
在我看来,
if(conditon) expression
比condition && expression
更具可读性
不要将其视为控制块(即: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 程序员会在尝试维护代码时陷入困境)。
你所拥有的将不起作用,但为什么不直接使用一行 if 语句来代替。
if(direction == "right") slideOffset += $(".range-slide").width();
这比 Ray 建议的方法需要更少的打字。当然,如果你真的想坚持这种格式,他的答案是有效的。
条件运算符是 not
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)
这并不能完全回答你的问题,但三元组允许你写的比你显示的要少:
direction = this.dragHandle.hasClass('handle-low') ? "left" : "right";
现在我想了一下,是的,你也可以提出你的问题:
slideOffset + direction == "right" ? = $(".range-slide").width() : = 0;
这是一个理论。下次我有机会
+=
三元时,我会尝试这个。让我知道它是如何工作的!
您可以使用以下简写:
if (condition) expression
如果在某些情况下您确实想使用
if
简写。尽管这可能不是最好的选择,但这是可能的。
condition ? fireMe() : ""
看起来很奇怪,但确实有效。在像 Vue 这样的框架中可能会派上用场,您可以在模板中编写此代码。
您可以使用短路评估简写。如果你想要 if 条件,只需写 else 条件即可。
let
a = 2,
b = a !== 2 || 'ok';
console.log(b);
我在简写 if 语句中遇到了这个问题,我刚刚通过在第三个操作数中放入 0 、 "" 或 null 来解决它。
this.dragHandle.hasClass('handle-low') ? direction = "left" : 0