有一段时间,我使用了" ||"作为"或"指示符。有一天,我在控制台中调试了一些东西,我不小心把一个|而不是两个。它仍然按预期工作。
console.log(0||1); // 1
console.log(0|1); // 1
有什么区别吗?在这里,显然不是,但可能存在一些我不知道的隐藏的差异。如果这是重复,我道歉,但我向你保证我事先已经找到了答案。
答案 0 :(得分:2)
这称为bitwise OR,意味着它根据二进制规则对构成值的各个位进行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
答案 1 :(得分:0)