使用布尔值的内联 NOT 运算符

Inline NOT operator using boolean

我有这段代码:

if (bool) {
    return <code that outputs bool>;
} else {
    return !<same code that outputs bool>;
}

有没有办法把上面的转换成这样的,这样我就不用写两次代码了?

return (bool? !! : !) <code>;

找到了!

return bool === <code>

写下一个道理table看到这个

      code
       T F
      +-+-
     T|T|F
bool  +-+-
     F|F|T

与 bool = code

相同 table

如果您不想将代码写两次,则将结果提取到变量或函数中

//sample <code that outputs bool>
var result = 

function calculateBool(someObj) {
   return someObj.fetchA()
  && someObj.fetchB()
  && someObj.fetchC()
  && someObj.fetchD()
  && someObj.fetchE()
// etc...
}

所以你可以简单地做

if (bool) {
  return result
} else {
  return !result
}

这可以简化为

if (!bool) {
  result = !result;
}
return result;

return bool? result : !result;

如果您更喜欢使用布尔代数来翻转结果,那么您可以使用 XOR。在 JavaScript 中,XOR 运算符仅适用于整数,因此它将布尔值转换为 01,但您可以直接将它们再次隐式转换为布尔值 !!value或明确 Boolean(value).

这里是 XOR 方程式的工作原理 valueToFlip XOR bool 将反转 bool = truevalueToFlip 为任何值的结果。如果你只想翻转bool = false,那么你可以简单地将它倒置在等式`valueToFlip XOR NOT bool:

function describeFlip(valueToFlip, bool) {
  const result = Boolean(valueToFlip ^ !bool);
  console.log(`${valueToFlip} ${bool}: ${result}`)
}


describeFlip(true, true);
describeFlip(false, true);
describeFlip(true, false);
describeFlip(false, false);