三元运算符是否可以等效于与逻辑运算符短路?

Can the ternary operator be equivalent to short circuiting with the logical operators?

通过短路可以防止对表达式的一部分求值:

let x = "", y = 123;
x && alert("foo"); // ""
y || alert("bar") // 123

由于逻辑操作形成表达式,您可以在函数调用或 return 语句中使用它们。

但归根结底,这只不过是条件分支,可以使用三元运算符轻松实现:

x ? alert("foo") : x; // ""
y ? y : alert("bar"); // 123

这更具可读性,同样简洁。除了说明性术语外,是否有理由使用逻辑运算符的短路 属性?

这是真的(好吧,几乎是真的)

x ? x : y

在逻辑上等同于

x || y

但是,就代码运行时发生的情况而言,它们并不相同。在 ? : 的情况下,子表达式 x 可能被计算 两次 。在 x || y 中,它肯定只计算一次。对于简单的变量引用,这无关紧要,但如果 x 是一个函数调用,它可能会影响行为并且肯定会影响性能。

(其中一个表达式可能被计算两次的事实是我在第一句中的 "almost" 的意思。)