JavaScript 中 & 和 && 有什么区别?

问题描述 投票:0回答:4

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 bitwise-operators logical-operators
4个回答
198
投票

&
是按位与

这个运算符在 JavaScript 中“几乎从未使用过”。其他编程语言(如 C 和 Java)出于性能原因或处理二进制数据而使用它。在 JavaScript 中,它的性能值得怀疑,而且我们很少使用二进制数据。 此运算符需要

两个数字

并返回一个 数字。如果它们不是数字,则会将其转换为数字。

它是如何工作的?

维基百科有一个答案:https://en.wikipedia.org/wiki/Bitwise_operation#AND

&&

是逻辑 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)

&&

短路
从上面可以看出,只要你发现某个术语是 false-y,你就不必关心后面的术语。这允许 Javascript 完全停止计算。这称为短路。

此语句不会发出任何警报,并返回

false

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

因此,您可以使用 
&&

运算符作为 if 语句的更短替代品。这些是等效的:

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

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


37
投票
&

是按位“与”。这意味着,如果您将两个数字转换为二进制,则结果是在两个数字都有

1
的位置处都有
1
数字的数字。

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



-4
投票
&

运算符。

&
是按位与。
使用 

&&

运算符,一旦发现第一个值为 false,就会结束评估,不再检查第二个值。

    


-5
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.