В чем разница между & и && в JavaScript?

в чем разница между & и && в JavaScript?

Пример-Код:

var first  = 123;
var second = false;
var third  = 456;
var fourth = "abc";
var fifth  = true;
alert(first & second); // 0
alert(first & third);  // 72
alert(first & fourth); // 0
alert(first & fifth);  // 1

alert(first && second); // false
alert(first && third);  // 456
alert(first && fourth); // abc
alert(first && fifth);  // true

похоже, & & - это логическое "и", которая дает мне всегда второе значение, если оба истинны.

но что это?

(кстати, & & кажется "и" в Python; & кажется & в Python.)

3 ответов


& - побитовое и

этот оператор ожидает два числа и повторяет a количество. в случае, если они не являются числами, они преобразуются в числа.

как это работает? Википедия имеет ответ:https://en.wikipedia.org/wiki/Bitwise_operation#AND

Примечание: в Javascript этот оператор используется как обескураженный, так как нет целого числа тип данных с плавающей точкой. Таким образом, поплавки преобразуются в целые числа перед каждой операцией, что делает ее медленной. Кроме того, он не имеет реального использования в типичных веб-приложениях и производит нечитаемый код.

общее правило: избегайте. Не используй его. он редко имеет место в ремонтопригодном и читаемом JS-коде.

&& логично и

он принимает два аргумента и возвращает:

  • первый термин, который оценивает в ложные
  • последний термин в противном случае (если все верно-y)

вот несколько примеров:

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)

&& короткое замыкание!--11-->

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

true && false && alert("I am quiet!")

это заявление ничего не предупреждает и false возвращается. Поэтому вы можете использовать && оператор как более короткая замена для оператора if. Это эквивалент:

if (user.isLoggedIn()) alert("Hello!")
user.isLoggedIn() && alert("Hello!")

почти все компрессоры JS используют этот трюк, чтобы сохранить 2 байта.


& - это побитовое "и". Это означает, что если у вас есть два числа, преобразованные в двоичный, результатом является число, которое имеет 1 цифра в позициях, где оба числа имеют 1.

  100011  //35
& 111001  //57
---------
  100001  //35 & 57 == 33

чтобы определить, являются ли два логических значения вместе true или false, если вы хотите проверить их оба (например, проверка на веб-странице), вы можете использовать оператор"&". "&"- это побитовый оператор and.

с оператором"&&", как только он найдет первое значение false, он завершит оценку и не будет проверять второе значение.