繁体   English   中英

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

[英]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("[] && {}:", [] && {});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM