Javascript 使用&&';是否将短路作为if语句?

Javascript 使用&&';是否将短路作为if语句?,javascript,short-circuiting,Javascript,Short Circuiting,我在jQuery.form.js源代码中看到了这一行: g && $.event.trigger("ajaxComplete", [xhr, s]); 我的第一个想法是wtf 我的下一个想法是,我无法决定这是丑陋还是优雅 我无论如何都不是Javascript大师,所以我的问题有两个方面。首先,我想确认我正确理解了它。上述行是否等于: if (g) { $.event.trigger("ajaxComplete", [xhr, s]); } 第二,这在Javascrip

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

g && $.event.trigger("ajaxComplete", [xhr, s]);
我的第一个想法是wtf

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

我无论如何都不是Javascript大师,所以我的问题有两个方面。首先,我想确认我正确理解了它。上述行是否等于:

if (g) {
    $.event.trigger("ajaxComplete", [xhr, s]);
}

第二,这在Javascript中是常见/公认的做法吗?一方面,它很简洁,但另一方面,如果你以前没有见过它,它可能有点神秘。

是的,你理解它(在那种背景下);是的,这是JavaScript的标准实践。

是的,它相当于您编写的
if
。这当然不是一种罕见的做法。它是否被接受取决于谁正在(或没有)接受…

是的,你的两个例子是等效的。它在几乎所有语言中都是这样工作的,但在Javascript中已经变得相当习惯了。就我个人而言,我认为这在某些情况下是好的,但在其他情况下可能被滥用。但是它确实更短,这对于最小化Javascript加载时间非常重要


另请参见

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

应为赋值或函数调用,而应为表达式


您必须小心,因为如果条件中存在
| |
,则可以绕过此短路:

false && true || true
> true
要避免这种情况,请确保将条件分组:

false && (true || true)
> false

默认情况下,它将触发jshint警告:

[jshint]应为赋值或函数调用,而应为表达式。(W030)[W030]


然而,就我个人而言,我更喜欢短路版本,它看起来更具声明性,并且具有“更少的控制逻辑”,这可能是一个误解。

它肯定不是C#中的标准实践。事实上,它甚至不会编译“只有赋值、调用、增量、减量和新对象表达式可以用作语句”,而且只有在下半部分返回
bool
时,否则您会得到“&&operator不能应用于'bool'和'[下半部分返回的任何类型]`类型的参数”你需要把它放在括号里并赋值。就为了你,我将删除关于C#的部分,因为这个问题是专门关于JavaScript的。第二章重点是,短路是为了替换if语句——if除了bool之外还能返回什么?问题不是短路是如何工作的。它特别是关于对副作用使用短路布尔运算符,而不是布尔逻辑。在我上面给出的示例中没有赋值,这是因为AND并排时优先于OR。当
2*(3+2)=10时,等效的数学情况为
2*3+2=8
。这是一种很容易被忽略的方式…明确地说,而不是使用一个if语句…你的大脑会感谢你的。VBA没有短路,这是我在4个小时的调试后通过艰苦的方式学会的。我曾经尝试过用java实现这样的短路,但语言似乎不允许。我说的对吗?@DarylBennett有--“AndAlso”和“OrElse”。我会说现在就杀了我,但是没有脉搏已经是编程VB的先决条件。@MaxG Java肯定有布尔运算符短路,它只是不允许您将它们用作语句。考虑到在第二种情况下甚至不需要这些大括号,我会投不清楚和丑陋的票,尽管我也不是JavaScript大师。相关