带有单个管道的 Javascript 条件语句 "|"

标签 javascript conditional-statements

只是想知道以前是否有人遇到过这种情况。

我在一个项目(从另一个开发人员那里移交的)中找到了一个看起来像这样的条件语句:

if (variableOne == true | variable2 == true) {
    // Do something here
}

它没有错误,所以似乎有效。但是,我和一位同事从未见过使用单个管道 | 的 OR 语句,只有 2 个 ||

谁能揭开这个谜团?

谢谢, 詹姆斯

最佳答案

这是按位或运算符。它首先将其转换为 32 位整数,然后将按位或运算应用于所得的两个数字。在这种情况下,由于 Boolean(1) 为真且 Number(true) 为 1,因此它可以正常工作而不会出现问题(==运算符将始终返回 bool 值,而 if 语句将任何内容转换为 bool 值)。以下是其工作原理的几个示例:

1 | 0; // 1
0 | 0; // 0
0 | 1; // 1
1 | 1; // 1
true | false; // 1
false | false; // 0
2 | 1; // 3 (00000010, 00000001) -> (00000011)

由于双方都必须转换为数字(并因此进行评估),因此在本应使用逻辑 OR 语句 (||) 时使用数字可能会导致意外结果。为此,请举这些例子:

var a = 1;
a | (a = 0);
console.log(a); // 0

var b = 1;
b || (b = 0);
console.log(b); // 1

// I wanted the first one
var c = 3 | 4; // oops, 7!

引用:http://www.ecma-international.org/ecma-262/5.1/#sec-11.10

关于带有单个管道的 Javascript 条件语句 "|",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18594940/

相关文章:

regex - Bash 中不区分大小写的条件

python - matplotlib 中的条件函数绘图

javascript - 加载不同的CSS到IE

JavaScript 提示()命令

javascript - 扩展 d3 树布局以在最终节点提供 HTML 框

javascript - jQuery 图像网格系统

python - 检查 python 列表的内容

javascript - 如何在javascript中分解url?

javascript - 如何在 <input type ="number"> 中移动插入符号?

java - 在java中的不同方法中引用条件切换的每种情况