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
。