有a&;Javascript中的逻辑运算符
我想知道Javascript中是否有一个“&”逻辑运算符。我尝试在Firebug(Firefox)中运行1&0和1&0,但它都返回了0 有人告诉我C#同时接受&和double&,double更有效,因为一旦遇到false,它就会退出比较循环,但我找不到关于这方面的任何Javascript信息有a&;Javascript中的逻辑运算符,javascript,Javascript,我想知道Javascript中是否有一个“&”逻辑运算符。我尝试在Firebug(Firefox)中运行1&0和1&0,但它都返回了0 有人告诉我C#同时接受&和double&,double更有效,因为一旦遇到false,它就会退出比较循环,但我找不到关于这方面的任何Javascript信息 有什么想法吗?没有。&是操作员&&是Javascript中唯一的逻辑AND运算符。是。Javascript兼有这两种功能 与C#中的情况完全一样,双版本&&version可以在遇到false时立即停止,而单
有什么想法吗?没有。
&
是操作员&&
是Javascript中唯一的逻辑AND运算符。是。Javascript兼有这两种功能
与C#中的情况完全一样,双版本&&version可以在遇到false时立即停止,而单版本&&version可能不会停止。&&是Javascript中的逻辑运算符。1&&0应返回false,以便正确执行 1&0等于0 它是位运算符,不是逻辑运算符 &&表示左右运算符的逻辑AND。这意味着只有当左操作符和右操作符都解析为布尔真时,它才会返回布尔真值 &表示左右运算符的按位AND。这意味着将比较每个操作数的位,结果将是and值,而不是布尔值。如果执行
101&100
操作,则返回值为100
。如果执行1&0
,则返回值为0
如果有人告诉你这两个操作符的区别仅仅在于效率,那么你就被误导了。它们有非常不同的用途。Javascript有按位(&)和布尔(&&)运算符。在1&&0上返回0的原因是0表示false,因此1(true)和&0(false)返回false,因为两个运算符必须求值为true才能返回true表达式
1&&0
的运算符返回0
,因为其语义不同于同一运算符的语义(好的,符号上是一样的)在其他类似C语言中
在Javascript中,&&
运算符将其操作数强制为布尔值,但仅用于求值
e1 && e2 && e3 ...
是第一个子表达式en
的actual值,其强制布尔值为false
。如果强制为布尔值时它们都是true
,则结果是最后一个en
的actual值。类似地,|
运算符解释如下表达式:
e1 || e2 || e3 ...
通过返回强制布尔值为true
的第一个en
的actual值。如果它们都为false,则该值为最后一个actual值
这些描述中隐含的一个事实是,&&
和|
一旦满足子表达式的完成条件,就停止计算它们。您的朋友对C的看法是错误的
C#不混合逻辑运算符和位运算符,因此不能使用&where&&或反之亦然
1&0返回0
true&&false返回false
因此,如果您正在编写一个if语句,它需要一个布尔值,那么您必须使用&。如果您正在执行逐位算术,那么您需要&。您可以在javascript中检查这一点:
&如果两个位都是1,则将每个位设置为1
示例:
5&1=1
0101&0001=0001试试1&&1
,它实际上会告诉您发生了什么…?1&&1返回1,而1&1返回1不是那样。我问的是单个&operator。但是为什么要返回“0”而不是“false”这是正确的,但它不返回false
,它返回第一个表达式的实际值,当强制为布尔值时,它是false
@James Curran,因为Javascript中的&&
和|
与C和Java中的类似运算符不同。除非使用布尔子表达式。这与&
不完全正确。表达式“hello”和&0
返回0
,而不是false
,表达式“hello”和“world”
返回“world”,而不是true
。我理解JavaScript的行为与我描述的不同,但我更关心逻辑和按位and之间的区别(以及它们在“大多数”语言中的行为)在任何情况下,值得注意的是JavaScript的&
和|124;
运算符返回truthy/fasley值,不一定是布尔值。它们的行为也类似于C的coalesce运算符?
&
将返回第一个假值或最后一个truthy值;|
将返回第一个truthy value.interest.Java确实允许使用&
和|
进行布尔运算,在这种情况下,它们显式存在是为了避免短路。它类似于逻辑“and”运算符,但与其他语言不同,它不生成布尔结果值,除非其操作数是布尔的。