What's the difference between & and && in Ja

What's the difference between & and && in JavaScript?

本文关键字:amp and in between Ja the What difference      更新时间:2023-09-26

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

似乎&&是一个合乎逻辑的and,它总是给我第二个值,如果两者都是true

&是什么?

(顺便说一下,&&在Python中似乎是and;&似乎是Python中的&)

&是位与

这个操作符是,在JavaScript中几乎从不使用。其他编程语言(如C和Java)出于性能原因或处理二进制数据而使用它。在JavaScript中,它的性能有问题,而且我们很少使用二进制数据。

该操作符期望两个数,并返回一个数。如果不是数字,则将其强制转换为数字。

它是如何工作的?维基百科有一个答案:https://en.wikipedia.org/wiki/Bitwise_operation#AND

&&是逻辑与

通常,程序员使用该操作符检查两个条件是否都为真,例如:

true && true        // returns true
true && false       // returns false
然而,在JavaScript中,它被扩展为允许任何数据类型和任何数量的术语。它返回:

  • 第一个求值为false的项
  • 最后一学期(如果全部为true-y)

下面是一些例子:

true && false && true         // returns false
true && 20 && 0 && false      // returns 0 (it is first false-y)
10 && "Rok" && true && 100    // returns 100 (as all are true-y)

&&短路

从上面可以看出,只要你发现其中一项是假的,你就不需要关心后面的项。这允许Javascript完全停止求值。这叫做短路。

这个语句不警告任何东西,返回false:

true && false && alert("I am quiet!")     // returns false
因此,可以使用&&操作符来代替if语句。它们是等价的:
if (user.isLoggedIn()) alert("Hello!")
user.isLoggedIn() && alert("Hello!")

几乎所有JS压缩器都使用这个技巧来节省2字节。

&是位"answers"。这意味着,如果你把两个数字转换成二进制,结果是一个数字在两个数字都有1的位置上有1的数字。

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

要确定两个布尔值放在一起是真还是假,如果您想同时检查它们(如在网页上验证),您可以使用&操作符。&是位与。

对于&&操作符,一旦发现第一个值为false,它将结束计算,而不检查第二个值。

在所有这些崇高而详细的见解中,他们大多忽略了一个事实,即存在一个条件计算,其中只有单个&将工作。实用的外行人的回答,解决了我的头打在IF语句字符串的多个链接&&条件的每个!==都导致了失败,需要合法地使用单个&我要感谢杰克·韦恩(和威少)的不公平的被否决的答案,他们的答案是正确的,因为有不止一个。== =它已经停止了它的求值,并且在找到第一个求值后不再继续==!和&&在第一次求值显示后,它认为它的工作完成了!== [eg]。假)。我的错误代码是

IF ((sessionStorage.myLable !== "LableStringA") && (sessionStorage.myLable !== "LableStringB") && (sessionStorage.myLableZ !== "LableStringA") && (sessionStorage.myLableZ !== "LableStringB")) { ...)

在这里,正确替换和使用单个&对于&&这在现实世界和技术上都是正确的答案。再次感谢Jake Wayne(和Russ)对代码的洞察力和理解。