使用布尔值的内联 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 运算符仅适用于整数,因此它将布尔值转换为 0
或 1
,但您可以直接将它们再次隐式转换为布尔值 !!value
或明确 Boolean(value)
.
这里是 XOR 方程式的工作原理 valueToFlip XOR bool
将反转 bool = true
和 valueToFlip
为任何值的结果。如果你只想翻转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);
我有这段代码:
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 运算符仅适用于整数,因此它将布尔值转换为 0
或 1
,但您可以直接将它们再次隐式转换为布尔值 !!value
或明确 Boolean(value)
.
这里是 XOR 方程式的工作原理 valueToFlip XOR bool
将反转 bool = true
和 valueToFlip
为任何值的结果。如果你只想翻转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);