使用三元运算符或仅进行短路评估之间的区别?
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("[] && {}:", [] && {});
最近遇到了短路评估,由于我上周才开始编程,所以有点困惑。据我了解,如果第一个双管道之前的内容为真,那么它将停止并且不会评估双管道之后的内容。例如:
示例 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("[] && {}:", [] && {});