作为一个if语句使用&&短路?

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

 g && $.event.trigger("ajaxComplete", [xhr, s]); 

我的第一个想法是wtf?

我的下一个想法是,我不能确定这是丑陋还是优雅。

我不是一个Javascript的大师,所以我的问题是双重的。 首先我要确认我的理解正确。 上面的行等价于:

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

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

是的,你的两个例子是相同的。 它在几乎所有的语言中都是这样工作的,但在Javascript中变得相当习惯。 我个人认为在某些情况下是好的,但可以在其他情况下被滥用。 尽pipe这个时间确实短一些,但是为了尽量减lessJavascript的加载时间,

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

这是标准的,但是JSLint和JSHint都不是这样的:

期望一个赋值或函数调用,而是看到一个expression式。

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

 false && true || true > true 

为了避免这种情况,请确保将条件分组:

 false && (true || true) > false 

是的,这相当于你写的。 这当然不是一个不常见的做法。 是否接受取决于谁是(或不是)正在接受…

是的,你明白(在这方面); 是的,这是JavaScript的标准做法。