为什么|当在第一面找到1时,按位OR运算符评估两边?

时间:2018-05-10 10:35:56

标签: javascript bitwise-operators

Bitwise OR定义是

  

在每个位位置返回零,两个操作数的相应位为零

所以它会返回一个。基本上这意味着1 | 01

||非常相似,如果一方为真,则返回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

为什么会这样?

0 个答案:

没有答案