&
побитовое И
Этот оператор ожидает два числа и возвращает число. Если это не числа, они преобразуются в числа.
Как это работает? В Википедии есть ответ: https://en.wikipedia.org/wiki/Bitwise_operation#AND
Примечание. В Javascript использование этого оператора не рекомендуется, так как нет целочисленного типа данных, только с плавающей запятой. Таким образом, числа с плавающей запятой преобразуются в целые числа перед каждой операцией, что замедляет ее выполнение. Кроме того, он не имеет реального использования в типичных веб-приложениях и создает нечитаемый код.
Общее правило: Избегайте. Не используйте это. Это редко имеет место в поддерживаемом и читаемом коде JS.
&&
логическое И
Он ожидает два аргумента и возвращает:
- Первый термин, который оценивается как ложь
- В противном случае последний срок (если все верно - у)
Вот некоторые примеры:
0 && false 0 (both are false-y, but 0 is the first)
true && false false (second one is false-y)
true && true true (both are true-y)
true && 20 20 (both are true-y)
Если вы когда-либо используете его только на Boolean, это как раз оператор AND из математической логики.
&&
цепочка операторов
Причина, по которой этот оператор определен, как указано выше, - это цепочка операторов. Вы можете связать этого оператора и при этом соблюдать вышеуказанные правила.
true && 20 && 0 && 100 0 (it is the first false-y)
10 && 20 && true && 100 100 (last one, since all are true-y)
&&
короткое замыкание
Как видно из определения, как только вы обнаружите, что один термин является ложным, вам не нужно беспокоиться о следующих терминах. Javascript даже пошёл дальше, термины даже не оцениваются. Это называется коротким замыканием.
true && false && alert("I am quiet!")
Этот оператор ни о чем не предупреждает и false
возвращается. Следовательно, вы можете использовать &&
оператор как более короткую замену оператору if. Они эквивалентны:
if (user.isLoggedIn()) alert("Hello!")
user.isLoggedIn() && alert("Hello!")
Почти все компрессоры JS используют этот трюк для сохранения 2 байтов.
fruits.length & veggies.length === 0
и логическое:fruits.length && veggies.length === true
.