为什么“false | true”为1但在Javascript中不正确?

时间:2015-05-07 07:06:06

标签: javascript

我问这个问题,因为如果你在Java中尝试它:

boolean a = true, b = false;
boolean c = a | b;

然后在c变量中将true值。但是如果我们在JS中运行类似的代码:

var a = false, b = true;
var c = a | b;

然后在c变量中将1值。 如何解释这种奇怪的行为?

2 个答案:

答案 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