使用&&的短路作为if语句?

Dav*_*vy8 28 javascript short-circuiting

我在jQuery.form.js源代码中看到了这一行:

g && $.event.trigger("ajaxComplete", [xhr, s]);
Run Code Online (Sandbox Code Playgroud)

我的第一个想法是wtf ??

我的下一个想法是,我无法确定这是丑陋还是优雅.

我不是一个Javascript大师,所以我的问题是2倍.首先,我想确认我理解正确.以上行是否相当于:

if (g) {
    $.event.trigger("ajaxComplete", [xhr, s]);
}
Run Code Online (Sandbox Code Playgroud)

其次是Javascript中常见/接受的做法?一方面它很简洁,但另一方面,如果你以前没见过它,它可能有点神秘.

dec*_*eze 17

是的,你的两个例子是等价的.它在几乎所有语言中都是这样的,但它在Javascript中变得相当惯用.我个人认为在某些情况下这种情况很好但在其他情况下可能会被滥用.它肯定更短,这对于最小化Javascript加载时间非常重要.

另请参阅有人可以解释John Resig的pretty.js JavaScript是如何工作的吗?

  • @DarylBennett有---"AndAlso"和"OrElse".我现在说杀了我,但没有脉冲已经是编程VB的先决条件. (3认同)

sdl*_*rhc 10

这是标准的,但既不的JSLint也不JSHint喜欢它:

期望一个赋值或函数调用,而是看到一个表达式.


Kyl*_*ner 5

你必须小心,因为如果||条件中有一个短路,可以绕过这个短路:

false && true || true
> true
Run Code Online (Sandbox Code Playgroud)

为避免这种情况,请务必对条件进行分组:

false && (true || true)
> false
Run Code Online (Sandbox Code Playgroud)

  • 这是因为当AND并排时,AND优先于OR.当'2*(3 + 2)= 10`时,等效数学情况将是"2*3 + 2 = 8".这太容易错过...... (3认同)