В 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 если операторы).
ПРИЛОЖЕНИЕ: больше любопытства, каков надлежащий термин для этого? Я замечаю, что многие из Вас используют термин 'короткое замыкание'. Кроме того, некоторые языки делают, это и другие не делают?
Оператор &&
"замыкает" - то есть, если левое условие ложно, он не беспокоит вычисление правого.
Аналогично, оператор ||
закорачивает, если левое условие истинно.
РЕДАКТИРОВАТЬ: Тем не менее, вам не следует беспокоиться о производительности, пока вы не проведете тест и не определите, что это проблема. Преждевременная микрооптимизация - это проклятие ремонтопригодности.
С точки зрения производительности это не микрооптимизация.
Если у нас есть 3 логических переменных, a, b, c, которые являются микрооптимизацией.
Если мы вызовем 3 функции, возвращающие логические переменные, каждая функция может занять много времени, и важно не только знать об этом коротком замыкании. , но в каком порядке. Например:
if (takesSeconds() && takesMinutes())
намного лучше, чем
if (takesMinutes() && takesSeconds())
, если оба с одинаковой вероятностью вернут false.
Он будет проверять все условия только в том случае, если первые из них верны, проверьте это сами:
javascript: alert (false && alert("A") && false);
Короткое замыкание - в вашем примере будут сравниваться только a и b.
Вот почему вы можете сделать это в коде javascript, например
var x = x || 2;
. Это будет означать, что если x не определен или иначе «ложно», то значение по умолчанию равно 2.
Он закрывается, когда видит, что b не равно единице.