三元运算符可以等同于逻辑运算符的短路吗?

时间:2016-02-02 22:38:59

标签: javascript short-circuiting ternary

通过短路,您可以阻止评估表达式的一部分:

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

由于逻辑运算形式表达式,您可以在函数调用或返回语句中使用它们。

但最终,这只不过是条件分支,可以通过三元运算符轻松实现:

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

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

1 个答案:

答案 0 :(得分:8)

这是真的(嗯,几乎是真的)
x ? x : y

在逻辑上等同于

x || y

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

(其中一个表达式可能被评估两次的事实是我的意思"几乎"在第一句中。)