我试图让我的代码变得更加简洁,而我从未真正理解的事情之一是短路评估。我认为这是因为当我研究这个问题时,它没有点击,因为通常这些例子都是伪代码,我无法理解它。
下面的代码是从我编写的 AJAX 脚本中提取的。等效的短路表达式是什么?如果可以的话,请用通俗易懂的语言解释一下它是如何评估的。
var xhr; (XMLHttpRequest) ?
xhr = new XMLHttpRequest :
xhr = new ActiveXObject("Microsoft.XMLHTTP");
最佳答案
我认为您发布的示例并不是说明短路的好方法。我知道您说您见过其他示例,但也许再一个就可以解决问题。
如果你有这样的使用三元的东西:
var fruit = apple ? apple : banana;
这段代码的意图是“如果苹果是真的,我希望水果等于苹果。否则,水果应该等于香蕉。”
使用短路的等效方法如下所示:
var fruit = apple || banana
由于 bool 逻辑的工作方式,此代码执行相同的操作。 ||
运算符表示 OR。你可能已经知道了。但如果你仔细想想,只要 ||
运算符的一侧为 true,则整个语句为 true。因此,如果表达式中的第一项为 true,它甚至不需要检查它的后半部分。没有意义,无论哪种方式都是正确的,为什么不节省一些运行时间呢?
赋值之所以有效,是因为它不是将 (apple || Banana) 强制转换为 bool 值,而是仅返回第一个真值,并且任何时候您在条件语句中使用它时,它都会被强制转换。
以下是更多短路示例
(1 || 2) // 1
(0 || 5) // 5 (0 is falsey)
(false || 0) // If the first value is falsey, the expression evaluates to the second item, whether its truthy or falsey.
(5 || 0) // 5
编辑:
为了让大家明白为什么它被称为短路
function doWork(){
console.log('Hello!');
}
(true || doWork())
控制台中不会打印任何内容,doWork
函数永远不会运行。因为对于计算机来说,这个表达式的后半部分可能不存在。
关于javascript - 三元到短路,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29524688/