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 && 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
:
true && false && alert("I am quiet!") // returns false
因此,您可以使用
&&
运算符作为 if 语句的更短替代品。这些是等效的:
if (user.isLoggedIn()) alert("Hello!")
user.isLoggedIn() && alert("Hello!")
几乎所有的 JS 压缩器都使用这个技巧来节省 2 个字节。
&
是按位“与”。这意味着,如果您将两个数字转换为二进制,则结果是在两个数字都有
1
的位置处都有 1
数字的数字。 100011 //35
& 111001 //57
---------
100001 //35 & 57 == 33
&
运算符。
&
是按位与。使用 &&
运算符,一旦发现第一个值为 false,就会结束评估,不再检查第二个值。
IF ((sessionStorage.myLable !== "LableStringA") && (sessionStorage.myLable !== "LableStringB") && (sessionStorage.myLableZ !== "LableStringA") && (sessionStorage.myLableZ !== "LableStringB")) { ...)
在这里,正确地替换并使用单个 & 来代替 && 它实际上在现实世界中并且在技术上都是正确的答案。再次感谢 Jake Wayne(和 Russ)对代码的洞察和理解。