我想知道Javascript中是否有"&"逻辑运算符。我在Firebug(Firefox)中尝试运行1 & 0和1 && 0,两者都返回了0。
有人告诉我C#接受&和双重&&,双重&&更有效率,因为它会在遇到false时立即退出比较循环,但我没有找到任何关于Javascript的信息。
有什么想法吗?
有人告诉我C#接受&和双重&&,双重&&更有效率,因为它会在遇到false时立即退出比较循环,但我没有找到任何关于Javascript的信息。
有什么想法吗?
“&”是位运算符中的按位与操作符。在Javascript中,“&&”是唯一的逻辑与操作符。
&&
运算符返回 0
,因为它在 JavaScript 中的语义与其他类 C 语言中的运算符不同(尽管其符号相同)。在 JavaScript 中,&&
运算符只对操作数进行布尔值转换,仅用于求值目的。表达式的结果形式如下:e1 && e2 && e3 ...
实际值是第一个子表达式en
的强制布尔值为false
。如果它们都被强制转换为布尔值,则结果是最后一个en
的实际值。同样地,||
运算符解释如下表达式:
e1 || e2 || e3 ...
en
的实际值来实现。如果它们都为假,则该值为最后一个的实际值。&&
还是||
一旦满足完成条件,就会停止评估子表达式。1 & 0 是 0。
这是位运算符,不是逻辑运算符。
&& 表示左右操作数的逻辑 AND。这意味着只有当左右操作数都解析为布尔值 true 时,它才会返回一个布尔值 true。
& 表示左右操作数的按位 AND。这意味着将比较每个操作数的位,并且结果将是按位 AND 的值,而不是布尔值。如果执行 101 & 100
,返回值是 100
。如果执行 1 & 0
,返回值是 0
。
如果有人告诉你两个运算符的区别仅在于效率,那么他们误导了你。它们有非常不同的用途。
&&
的说法并不完全正确。表达式 "hello" && 0
返回的是 0
,而不是 false
,表达式 "hello" && "world"
返回的是 "world",而不是 true
。 - Pointy&&
和||
运算符返回truthy/falsy值,不一定是布尔值。它们也像C#的合并运算符??
http://msdn.microsoft.com/en-us/library/ms173224.aspx &&
将返回第一个falsey值或最后一个truthy值;||
将返回第一个truthy值。 - Justin Johnson关于C#,你的朋友是错误的。
C#不会混淆逻辑运算符和位运算符,所以不能在需要使用&&时使用&,反之亦然。
1 & 0返回0
true && false返回false
因此,如果您正在编写需要布尔值的if语句,则必须使用&&。如果您正在进行位运算,则需要使用&。
&
和|
进行布尔运算,在这种情况下它们存在的目的是为了避免短路。 - Pointy是的。Javascript都有。http://www.eecs.umich.edu/~bartlett/jsops.html
就像在C#中一样,双&&版本可以在遇到false时立即停止,而单&版本可能不会。
您可以在JavaScript中检查位运算:
https://www.w3schools.com/js/js_bitwise.asp
& 表示如果两个二进制位都为 1,则该位置为 1
示例: 5 & 1 = 1
0101 & 0001 = 0001
&& 是 Javascript 中的逻辑运算符。1 && 0 应该返回 false,所以它的表现是正确的。
false
。 - Pointy&&
和||
与C、Java等语言中的类似运算符是不同的。除非处理布尔子表达式,否则它们不会返回布尔结果。 - Pointy
1 && 1
,这能够向你展示实际发生了什么...? - MvanGeest