javascript - 三元到短路

标签 javascript jquery

我试图让我的代码变得更加简洁,而我从未真正理解的事情之一是短路评估。我认为这是因为当我研究这个问题时,它没有点击,因为通常这些例子都是伪代码,我无法理解它。

下面的代码是从我编写的 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/

相关文章:

javascript - 在页面加载时重绘完整日历

php - AJAX vs PHP 直接转入JS

jquery - 如何使用 jquery 动态构建包含多个 <span> 的 .text 节点

javascript - 标签标签 : Different result in Chrome and Firefox 中的复选框

javascript - 当我使用 Angular 进行 forEach 循环时,为什么无法访问工厂中的数组?

javascript - 使用 jQuery 读取 XML

javascript - 展开/折叠所有 gof kendoTreeList

javascript - 如何退出 setInterval

javascript - 动态生成的按钮不适用于 Javascript

javascript - 在 Javascript 中使用表单提交时如何防止结果和输入数据消失