28

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

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

我的第一个想法是wtf??

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

无论如何,我都不是 Javascript 专家,所以我的问题是 2 倍的。首先,我想确认我理解正确。上面的行是否等效于:

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

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

4

6 回答 6

18

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

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

于 2011-02-19T05:15:09.310 回答
10

这是标准的,但JSLintJSHint都不喜欢它:

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

于 2011-02-19T05:56:46.560 回答
5

您必须小心,因为如果条件中有一个,则可以绕过此短路||

false && true || true
> true

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

false && (true || true)
> false
于 2014-01-23T22:30:52.963 回答
4

是的,它相当于if你写的。这当然不是一种罕见的做法。它是否被接受取决于谁在(或不是)接受...

于 2011-02-19T05:14:21.170 回答
2

是的,你理解它(在那种情况下);是的,这是 JavaScript 的标准做法。

于 2011-02-19T05:14:00.393 回答
-1

默认情况下,它会触发一个 jshint 警告:

[jshint] 期望一个赋值或函数调用,但看到了一个表达式。(W030) [W030]

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

于 2018-11-16T10:22:56.563 回答