使用三元运算符或仅进行短路评估之间的区别?

Difference between using a ternary operator or just short-circuit evaluation?

最近遇到了短路评估,由于我上周才开始编程,所以有点困惑。据我了解,如果第一个双管道之前的内容为真,那么它将停止并且不会评估双管道之后的内容。例如:

示例 1:

var a = true;
var b = a || {};

所以我假设如果 a 存在则将 a 分配给 b 否则 b 等于一个对象。 我不明白的是我将在哪里使用它以及它与三元运算符有何不同,短路评估是否与以下内容相同:

示例 2:

var a = true;
var b = (a) ? a : {};

为什么要使用示例 1 而不是示例 2,因为它写起来不会慢一点,或者使用其中一个比另一个有速度优势吗?或者这只是一个愚蠢的问题,也许我遗漏了什么。如果有人能为我解决这个问题,那就太好了。

短路运算符可以通过多种方式影响正确性和性能。

关键是避免第二个操作数的副作用或性能下降。

短路可以通过仅在安全时评估第二个操作数来避免错误:

var a = a && someFunctionThatWillThrowIfAIsNull(a);

如果较快的函数的结果会使第二个操作数变得多余,则可以通过将其放在第二位来避免较慢的函数:

var a = someFastFunction() || someSlowFunction();

这是一个不同用法的例子(取决于第一个参数)。检查他们每个人的控制台以了解他们的工作方式。

console.log("'' || {}:", '' || {});
console.log("1 || {}:", 1 || {});
console.log("0 || {}:", 0 || {});
console.log("true || {}:", true || {});
console.log("false || {}:", false || {});
console.log("[] || {}:", [] || {});

console.log('');

console.log("('') ? '' : {}:", ('') ? '' : {});
console.log("(1) ? 1 : {}:", (1) ? 1 : {});
console.log("(0) ? 0 : {}:", (0) ? 0 : {});
console.log("(true) ? true : {}:", (true) ? true : {});
console.log("(false) ? false : {}:", (false) ? false : {});
console.log("([]) ? [] : {}:", ([]) ? [] : {});

console.log('');

console.log("'' && {}:", '' && {});
console.log("1 && {}:", 1 && {});
console.log("0 && {}:", 0 && {});
console.log("true && {}:", true && {});
console.log("false && {}:", false && {});
console.log("[] && {}:", [] && {});