javascript - JavaScript 中单竖线和双竖线(|、||)的区别?

标签 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/

相关文章:

javascript - Js为每个循环更改数组中的对象

javascript - Android Chrome 浏览器地址栏移动固定元素命中区域

javascript - Google Place Autocomplete API 下拉列表未显示在模态中

javascript - 获取 API 返回空字符串

javascript - 如何发布到 url 但重定向到其他位置?

javascript - Lightbox2 宽度自动设置

javascript - Wordpress - 未捕获的类型错误 : wp. 媒体不是函数

javascript - 处理异步/等待中的链式 promise 错误

javascript - 我在下拉菜单中尝试了下一个和前 5 年的 html 代码..我正确地得到了下一个 5 年..我怎样才能获得前 5 年

javascript - 在typescript中使用rxjs时出现错误