<分区>
有一段时间,我用“||”作为“或”指标。有一天,我在控制台调试一些东西,不小心放了一个 |而不是两个。它仍然按预期工作。
console.log(0||1); // 1
console.log(0|1); // 1
有区别吗?在这里,显然没有,但可能有一些我不知道的隐藏差异。如果这是重复的,我深表歉意,但我向你保证,我已经事先寻找了答案。
标签 javascript
<分区>
有一段时间,我用“||”作为“或”指标。有一天,我在控制台调试一些东西,不小心放了一个 |而不是两个。它仍然按预期工作。
console.log(0||1); // 1
console.log(0|1); // 1
有区别吗?在这里,显然没有,但可能有一些我不知道的隐藏差异。如果这是重复的,我深表歉意,但我向你保证,我已经事先寻找了答案。
最佳答案
这叫做 bitwise 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
。
||
( logical OR ) 的行为方式是使用强制规则,该规则返回 ||
序列中的第一个真实项目(或仅最后一个项目) .
因为 0
是假的,0 || 1
,将返回1
。
仅仅因为在这两种情况下答案恰好相同,并不意味着操作总是产生相同的结果。
例如:
2|3 === 3
2||3 === 2
关于javascript - JavaScript 中单竖线和双竖线(|、||)的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49589867/