在 JavaScript 中 &and& 之间有什么区别? &是按位和 &&是合乎逻辑的 AND &&运算符链接 &&短路

和 在 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

这似乎是一个逻辑,如果两者都是,它总是给我第二个值。&&andtrue

但什么是?&

(顺便说一句,似乎在Python中; 似乎在Python中)&&and&&


答案 1

&是按位和

此运算符需要两个数字并重新调谐一个数字。如果它们不是数字,则将其转换为数字。

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

注意:在Javascript中,不鼓励使用此运算符,因为没有整数数据类型,只有浮点。因此,浮点数在每次操作之前都转换为整数,使其变慢。此外,它在典型的Web应用程序中没有实际用途,并且会产生不可读的代码。

一般规则:避免。不要使用它。它很少在可维护和可读的JS代码中占有一席之地。

&&是合乎逻辑的 AND

它需要两个参数和返回:

  • 第一个计算结果为假的项
  • 最后一个学期,否则(如果所有条款都为真)

以下是一些示例:

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)

如果你只在布尔值上使用它,这正好是来自数理逻辑的AND运算符。

&&运算符链接

此运算符定义如上的原因是运算符链接。您可以链接此运算符,并且仍保留上述规则。

true && 20 && 0 && false        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!")

此语句不会提醒任何内容,而是返回。因此,可以使用运算符作为 if 语句的较短替换。这些是等效的:false&&

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

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


答案 2

&是按位的“和”。这意味着,如果有两个数字转换为二进制,则结果是一个数字,该数字位于两个数字具有 的位置。11

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