JavaScript中单和双竖条(|,||)之间的区别?

时间:2018-03-31 16:15:33

标签: javascript

有一段时间,我使用了" ||"作为"或"指示符。有一天,我在控制台中调试了一些东西,我不小心把一个|而不是两个。它仍然按预期工作。

console.log(0||1); // 1
console.log(0|1); // 1

有什么区别吗?在这里,显然不是,但可能存在一些我不知道的隐藏的差异。如果这是重复,我道歉,但我向你保证我事先已经找到了答案。

2 个答案:

答案 0 :(得分:2)

这称为bitwise OR,意味着它根据二进制规则对构成值的各个位进行OR运算。

a   b   a OR b
0   0     0
0   1     1
1   0     1
1   1     1

对于您的示例,二进制文件中的0仅为0000,二进制文件中的10001

因此0|1是:

0000 | 0001

当我们将上表应用于两个数字的每个二进制数字时:

0 or 0 = 0
0 or 0 = 0
0 or 0 = 0
0 or 1 = 1

给我们0001,转换为十进制时变为1

||logical OR)行为的方式是使用强制规则,它返回||序列中的第一个真实项目(或仅仅是最后一项)。

由于0是假的,0 || 1会返回1

仅仅因为在这两种情况下答案恰好相同,并不意味着操作总能产生相同的结果。

例如:

2|3 === 3
2||3 === 2

答案 1 :(得分:0)

|bitwise OR。

  

对每对位执行OR运算。如果a或b为1

,则OR b产生1

||logical OR。

在您的示例中,0|1将评估为1,因为... 0000 | ... 0001评估为... 0001

0||1会评估为1因为0是假的,所以它会返回正确的操作数1