jam*_*ley 1 javascript conditional-statements
只是想知道是否有人曾经遇到过这个问题.
我在一个项目(从另一个开发人员移交)中发现了一个看起来像这样的条件语句:
if (variableOne == true | variable2 == true) {
// Do something here
}
Run Code Online (Sandbox Code Playgroud)
它没有错误,所以似乎工作.但是,我和一位同事从未见过一个带有单个管道的OR语句|,只有2个||.
任何人都可以阐明这个谜团吗?
谢谢,詹姆斯
Qan*_*avy 11
这是一个按位OR运算符.它将首先将其转换为32位整数,然后将按位OR运算应用于结果的两个数字.在这个例子中,因为它Boolean(1)是真的并且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)
Run Code Online (Sandbox Code Playgroud)
由于双方都必须转换为数字(并因此进行评估),因此在使用逻辑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!
Run Code Online (Sandbox Code Playgroud)
参考文献:http://www.ecma-international.org/ecma-262/5.1/#sec-11.10
| 归档时间: |
|
| 查看次数: |
4772 次 |
| 最近记录: |