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中)。

&是按位与

这个操作员期待两个数字并回退一个数字。 如果他们不是数字,他们被转换为数字。

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

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

一般规则:避免。 不要使用它。 它很less有可维护和可读的JS代码的地方。

&&是合乎逻辑的

它期待两个论点和回报:

  • 第一项评估为假
  • 最后一学期否则(如果都是真的)

这里有些例子:

 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) 

这个定义符合逻辑和math领域的定义。

&&操作符链接

这个操作符如上定义的原因是操作符链接。 你可以链接这个运营商,并保持上述规则。

 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个字节。

&是按位“和”。 这意味着如果您将两个数字转换为二进制数,则结果是一个数字,在两个数字都为1的位置上有一个数字。

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

要确定两个布尔值放在一起是正确的还是错误的,如果你想同时检查它们(比如在网页上validation),你可以使用“&”运算符。 “&”是按位与。

使用“&&”运算符,一旦发现第一个值为假,它将结束评估,而不检查第二个值。