Bitwise OR定义是
在每个位位置返回零,两个操作数的相应位为零
所以它会返回一个。基本上这意味着1 | 0
是1
。
与||
非常相似,如果一方为真,则返回true。
但是,我们知道||
,如果左侧表达式为真,则停在此处并且不会评估右侧表达式,因为无论如何,结果都将为真。
这意味着
var a = 0, b = 0;
function incrementAAndReturnTrue(){
a++;
return true;
}
function incrementBAndReturnFalse(){
b++;
return false;
}
incrementAAndReturnTrue() || incrementBAndReturnFalse();
console.log(a); // 1
console.log(b); // 0
但是,对于按位OR运算符,无论如何都会对双方进行求值。
var a = 0, b = 0;
function incrementAAndReturnOne(){
a++;
return 1;
}
function incrementBAndReturnTwo(){
b++;
return 0;
}
incrementAAndReturnOne() | incrementBAndReturnTwo();
console.log(a); // 1
console.log(b); // I expected 0, but it's 1
为什么会这样?