我问这个问题,因为如果你在Java中尝试它:
boolean a = true, b = false;
boolean c = a | b;
然后在c
变量中将true
值。但是如果我们在JS中运行类似的代码:
var a = false, b = true;
var c = a | b;
然后在c
变量中将1
值。
如何解释这种奇怪的行为?
答案 0 :(得分:1)
|是bitwise operator。当你写“假|如果它被视为0 | 1。
来自MDN:
对每对位执行OR运算。如果,OR b产生1 或者a或b是1. OR运算的真值表是:
a b a OR b
0 0 0
0 1 1
1 0 1
1 1 1
正如Grijesh正确评论的那样,在Java boolean c = 1
中给出了真实,而在Javascript var c = 1
中由于类型转换而给出1。隐式类型转换发生在Java中,但不发生在Javascript中。
这是一篇很好的文章:All about types in Javascript – Automatic type conversion
与Java不同,javascript中的逻辑运算符适用于任何类型。 与Java不同,它们不返回布尔值。他们仍然期望布尔值,如果没有给出两个操作数转换 布尔值。
答案 1 :(得分:0)
||
表示OR并返回true
。
true || false; // true
false || true; // true
|
实际上是一个逐位运算符,它将它解释为0|1
并返回数字1
,因为逐位运算符只能处理数字。
false | true; // 1
0 | 1; // 1
true | false; // 1
1 | 0; // 1