Подтвердить что ты не робот

Какая разница между & и && в 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.)

4b9b3361

Ответ 1

& побитовое значение AND

Этот оператор ожидает двух чисел и перенастроит число .. Если они не являются числами, они передаются в числа.

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

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

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

&& является логическим И

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

  • Первый термин, который вычисляет false
  • Последний термин в противном случае (если все true-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)

Это определение соответствует определению логического и математического поля.

&& цепочка операторов

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

true && 20 && 0 && 100          0 (it is the first false-y)
10 && 20 && true && 100         100 (last one, since all are true-y)

&& короткое замыкание

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

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

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

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

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

Ответ 2

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

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

Ответ 3

Чтобы определить, совпадают ли два логических значения: true или false, если вы хотите проверить их оба (например, проверку на веб-странице), вы можете использовать "&" оператор. "& Амп;" побитовое И.

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