В чем разница между & и && в JavaScript? - PullRequest
62 голосов
/ 05 сентября 2011

В чем разница между & и && в 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 - "&".)

Ответы [ 4 ]

113 голосов
/ 05 сентября 2011

& поразрядно И

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

Как это работает? В Википедии есть ответ: 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)

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

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

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

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

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

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

21 голосов
/ 05 сентября 2011

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

  100011  //35
& 111001  //57
---------
  100001  //35 & 57 == 33
0 голосов
/ 01 июня 2019

Со всеми высокими и подробными идеями, ответ практического непрофессионала, который решил, что я бьюсь о цепочке операторов IF из четырех цепочек &&, заставляя FAILURE выполнять оценочную работу под рукой как IF ((sessionStorage.myLable! =="LableStringA") && (sessionStorage.myLable! == "LableStringB") && (sessionStorage.myLableZ! == "LableStringA") && (sessionStorage.myLableZ! == "LableStringB")) {...) было ПРАКТИЧЕСКИ вРеальный мир решен с помощью решения «за-4» (теперь показано чуть ниже), просто с помощью одного & вместо && Спасибо Джейк Уэйн (и Расс).Обратите внимание, что при тестировании мой пример! = Также работал, если его использовать вместо предпочтительного! ==

0 голосов
/ 20 сентября 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...