JavaScript, если оператор с несколькими условиями тестируют всех их?

В JavaScript, при использовании, если оператор с несколькими условиями протестировать на, JavaScript тестирует их всех независимо, или действительно ли он возьмет на поруки прежде, чем протестировать их всех, если это будет уже ложно?

Например:

 a = 1
 b = 2
 c = 1

 if (a==1 && b==1 && c==1)

JavaScript протестирует на все 3 из тех условий или после наблюдения, что b не равняется 1 и является поэтому ложью, это выйдет из оператора?

Я спрашиваю от точки зрения производительности. Если, например, я тестирую 3 сложных селектора jQuery, у меня не было бы пересечения jQuery DOM 3 раза, если очевидно через первое, что это собирается возвратить FALSE. (В этом случае имело бы больше смысла вкладывать 3 если операторы).

ПРИЛОЖЕНИЕ: больше любопытства, каков надлежащий термин для этого? Я замечаю, что многие из Вас используют термин 'короткое замыкание'. Кроме того, некоторые языки делают, это и другие не делают?

90
задан Keez 22 October 2014 в 01:06
поделиться

6 ответов

Оператор && "замыкает" - то есть, если левое условие ложно, он не беспокоит вычисление правого.

Аналогично, оператор || закорачивает, если левое условие истинно.

РЕДАКТИРОВАТЬ: Тем не менее, вам не следует беспокоиться о производительности, пока вы не проведете тест и не определите, что это проблема. Преждевременная микрооптимизация - это проклятие ремонтопригодности.

139
ответ дан 24 November 2019 в 07:02
поделиться

С точки зрения производительности это не микрооптимизация.

Если у нас есть 3 логических переменных, a, b, c, которые являются микрооптимизацией.

Если мы вызовем 3 функции, возвращающие логические переменные, каждая функция может занять много времени, и важно не только знать об этом коротком замыкании. , но в каком порядке. Например:

if (takesSeconds() && takesMinutes())

намного лучше, чем

if (takesMinutes() && takesSeconds())

, если оба с одинаковой вероятностью вернут false.

13
ответ дан 24 November 2019 в 07:02
поделиться

Он будет проверять все условия только в том случае, если первые из них верны, проверьте это сами:

javascript: alert (false && alert("A") && false);
7
ответ дан 24 November 2019 в 07:02
поделиться

Короткое замыкание - в вашем примере будут сравниваться только a и b.

3
ответ дан 24 November 2019 в 07:02
поделиться

Вот почему вы можете сделать это в коде javascript, например

var x = x || 2;

. Это будет означать, что если x не определен или иначе «ложно», то значение по умолчанию равно 2.

10
ответ дан 24 November 2019 в 07:02
поделиться

Он закрывается, когда видит, что b не равно единице.

2
ответ дан 24 November 2019 в 07:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: