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

JavaScript中单竖条和双竖条(|,| |)之间的区别?,javascript,Javascript,一段时间以来,我一直使用“| |”作为“或”指示器。有一天,我在控制台上调试一些东西,我不小心把一个而不是两个放进了一个。它仍然像预期的那样工作 console.log(0 | | 1);//1. console.log(0 | 1);//1. 有什么区别吗?在这里,显然没有,但可能有一些隐藏的差异,我不知道。如果这是重复的,我很抱歉,但我向您保证,我已经事先找到了答案。|是OR 对每对位执行OR操作。如果a或b是1,则a或b产生1 |是OR 在您的示例中,0 | 1将计算为1,因为。。。00

一段时间以来,我一直使用“| |”作为“或”指示器。有一天,我在控制台上调试一些东西,我不小心把一个而不是两个放进了一个。它仍然像预期的那样工作

console.log(0 | | 1);//1.
console.log(0 | 1);//1.
有什么区别吗?在这里,显然没有,但可能有一些隐藏的差异,我不知道。如果这是重复的,我很抱歉,但我向您保证,我已经事先找到了答案。

|
是OR

对每对位执行OR操作。如果a或b是1,则a或b产生1

|
是OR

在您的示例中,
0 | 1
将计算为
1
,因为
。。。0000 | ... 0001
计算结果为
。。。0001

0 | | 1
将求值为
1
,因为
0
是错误的,因此它将返回称为a的右操作数
1
,这意味着它将根据二进制规则对组成值的各个位进行OR运算

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/1
0*1
也有相同的结果,但是
*
/
肯定不一样。因此,您应该始终使用多个组合进行测试<代码>2 | 1是
3
2 | 1
2