JavaScript中单竖线(|)和双竖线(||)的区别是什么?

4

有一段时间,我使用"||"作为"或"指示器。有一天,在控制台中调试某些内容时,我不小心只输入了一个 "|" 而不是两个。它仍然按预期工作。

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

有区别吗?在这里,显然没有,但可能存在我不知道的隐藏差异。如果这是重复的问题,我很抱歉,但我保证我之前已经寻找过答案。


2
仅在一个测试用例中获得相同的结果,并不意味着它们是相等的证据或指示。0/10*1也有相同的结果,但*/肯定不同。因此,您应该始终使用不止一个组合进行测试。2|13,而2||12 - t.niese
2个回答

3

那被称为按位或运算,意味着它通过二进制规则对组成值的各个位进行逻辑或运算。

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

对于你的例子,二进制下的0就是0000,而二进制下的1则是0001
因此,0|1的结果是:
0000 | 0001

当我们将上述表格应用于两个数字的每个二进制位时:
0 or 0 = 0
0 or 0 = 0
0 or 0 = 0
0 or 1 = 1

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


||逻辑或)的行为是使用强制转换规则,它返回一系列||中的第一个真值项目(或者只是最后一个项目)。

由于0是假值,0 || 1将返回1


仅仅因为这两种情况的答案相同,并不意味着这些操作总是产生相等的结果。

例如:

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

0

| 是一个按位或。

对每一对比特执行OR操作。a OR b如果a或b为1,则产生1

|| 是一个逻辑或。

在你的例子中,0|1将计算为1,因为... 0000 | ... 0001计算结果为... 0001

0||1将计算为1,因为0是假值,所以它将返回右操作数1


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接