带有单个管道的Javascript条件语句“|&”;
Javascript conditional statement with a single pipe "|"
只是想知道以前是否有人遇到过这种情况。
我在一个项目(从另一个开发人员那里移交的)中发现了一个条件语句,看起来像这样:
if (variableOne == true | variable2 == true) {
// Do something here
}
它没有出错,所以似乎有效。但是,我和一位同事从未见过一个OR语句带有一个管道|
,只有2个||
。
有人能揭开这个谜吗?
谢谢,James
这是一个按位OR运算符。它将首先将其转换为32位整数,然后对产生的两个数字应用逐位OR运算。在这种情况下,由于Boolean(1)
为true,Number(true)
为1,因此它将正常工作而不会出现问题(==
运算符将始终返回布尔值,if语句将任何内容转换为布尔值)。以下是它如何工作的几个例子:
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
这是位OR,请参阅Mozilla的文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators)
双管道语法"||"表示它会使逻辑表达式短路。只评估所需的,直到它知道结果。这意味着什么?
if(a==null || a.type=='ok')
如果a为null,它将只计算表达式的第一部分,而不会在javascript方面出现错误。
if(a==null | a.type=='ok')
如果在这种情况下a为null,则会出现错误,因为它也会计算表达式的第二部分。
其他C类型语言也是如此:Java、C、C++同样的道理也适用于"&和'&;'
|
是一个逐位OR,在一些非常有限的情况下,它可以替代||
。
一个重要的区别是,|
计算两个操作数,而||
仅在第一个操作数为false时才计算第二个操作数。
来源:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators
- 这个条件语句的逻辑有问题
- 如何检查if/else语句中的随机条件
- 使用条件语句,使 jquery fadeIn/fadeOut 仅在视口 >= 480px 时才有效
- 照片滑块的条件语句
- 使用解析为javascript源的.php,如何使用条件语句将javascript代码封装在php括号之间
- KnockoutJS:为虚拟元素使用嵌套的条件if语句
- 在if语句注释的条件内指定变量的值
- Javascript/C# - 满足语句条件时的确认对话框
- 如何将窗口[VariableName]设置为if语句条件
- if 语句条件由 javascript 中 if 语句内的内容触发
- if 语句条件逻辑
- 函数声明,就像语句条件一样
- 如何减少“如果语句”条件?[减少 if 语句中的条件]
- if语句条件检查!= "undefined"失败
- If语句条件满足,但内容未执行
- AngularJS在ng-repeat语句中的if语句条件
- 变量中用作if语句条件的字符串
- Javascript如果语句条件不满足
- if 语句 - 条件评估时间(Javascript)
- 数组中指定的 if 语句条件