Используя && в качестве оператора if? - PullRequest
27 голосов
/ 19 февраля 2011

Я видел эту строку в jQuery.form.js исходном коде:

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

Моя первая мысль была wtf ??

Моя следующая мысль была, я не могу решить, если это уродливоили элегантный.

Я ни в коем случае не гуру Javascript, поэтому мой вопрос двоякий.Сначала я хочу подтвердить, что правильно понимаю.Является ли приведенная выше строка эквивалентной:

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

И, во-вторых, является ли это распространенной / принятой практикой в ​​Javascript?С одной стороны, он лаконичен, но с другой может показаться немного загадочным, если вы его раньше не видели.

Ответы [ 6 ]

17 голосов
/ 19 февраля 2011

Да, ваши два примера эквивалентны.Это работает почти во всех языках, но в Javascript стало довольно идиоматичным.Лично я считаю, что в одних ситуациях это хорошо, но в других можно злоупотреблять.Однако он определенно короче, что может быть важно для минимизации времени загрузки Javascript.

Также см. Может кто-нибудь объяснить, как работает JavaScript Джона Ресига pretty.js?

10 голосов
/ 19 февраля 2011

Стандартно, но ни JSLint , ни JSHint не нравится:

Ожидается присваивание или вызов функции, и вместо этого он видит выражение.

5 голосов
/ 24 января 2014

Вы должны быть осторожны, поскольку это короткое замыкание можно обойти, если в условном выражении есть ||:

false && true || true
> true

Чтобы избежать этого, обязательно сгруппируйте условия:

false && (true || true)
> false
1 голос
/ 19 февраля 2011

Да, это эквивалентно if, как вы написали.Это определенно не редкая практика.Принято ли это, зависит от того, кто принимает (или не делает) принятие ...

1 голос
/ 19 февраля 2011

Да, вы понимаете это (в этом контексте);да, это стандартная практика в JavaScript.

0 голосов
/ 16 ноября 2018

По умолчанию это вызовет предупреждение jshint:

[jshint] Ожидается присваивание или вызов функции, и вместо этого он видит выражение.(W030) [W030]

Однако лично я предпочитаю версию с коротким замыканием, , она выглядит более декларативной и имеет "меньше управляющей логики" ,может быть ошибочным.

...