有一段时间,我使用"||"作为"或"指示器。有一天,在控制台中调试某些内容时,我不小心只输入了一个 "|" 而不是两个。它仍然按预期工作。
console.log(0||1); // 1
console.log(0|1); // 1
有区别吗?在这里,显然没有,但可能存在我不知道的隐藏差异。如果这是重复的问题,我很抱歉,但我保证我之前已经寻找过答案。
有一段时间,我使用"||"作为"或"指示器。有一天,在控制台中调试某些内容时,我不小心只输入了一个 "|" 而不是两个。它仍然按预期工作。
console.log(0||1); // 1
console.log(0|1); // 1
有区别吗?在这里,显然没有,但可能存在我不知道的隐藏差异。如果这是重复的问题,我很抱歉,但我保证我之前已经寻找过答案。
那被称为按位或运算,意味着它通过二进制规则对组成值的各个位进行逻辑或运算。
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
。 - t.niese