【发布时间】:2021-10-05 13:54:51
【问题描述】:
有没有办法重构这个逻辑表达式?
A && B && B > A
刚刚学习,我想知道写相同表达式的另一种方法 谢谢
【问题讨论】:
-
你认为这个表达式代表什么?什么是 A 和 B?
-
Scott Hunter,是布尔值
标签: javascript logic
有没有办法重构这个逻辑表达式?
A && B && B > A
刚刚学习,我想知道写相同表达式的另一种方法 谢谢
【问题讨论】:
标签: javascript logic
拆分表达式并将它们放入具有可读名称的变量中。
由于缺乏关于 A 和 B 是什么的信息,我假设表达式的前半部分确保两个值都是真实的,然后您比较它们:
const bothTruthy= A && B;
const BLargerThanA = B > A;
const yourExpression = bothTruthy && BLargerThanA;
【讨论】:
更新:
好的,以下解决方案不适用于所有情况。
如果您希望 A 和 B 被解释为 true,我认为您不需要重构您的表达式逻辑。在处理逻辑表达式的过程中,引擎独立优化并执行lazy way,例如:如果表达式A && (B || C)中的值A被解释为false,那么表达式的处理将立即结束并返回值A(false 或等效值),但如果A 的值被解释为true,则条件处理将继续。此外,如果B 被解释为true,那么由于逻辑加法(OR),处理将以等于true 的值结束,如果B 被解释为@ 987654335@,然后继续处理...
试试这个 - A && (B > A)
const cases = [
[true, false],
[false, true],
[false, false],
[true, true],
[1, 2],
[2, 1],
[1, 0],
[0, 1],
[undefined, 1],
[1, undefined],
[undefined, 0],
[0, undefined],
[null, undefined],
[undefined, null],
[1, NaN],
[NaN, 1],
[0, NaN],
[NaN, 0],
[{}, 0],
[1, {}],
[{}, []],
[[], {}],
['2', 1],
[1, '2'],
[true, 1],
[1, true],
[true, '1'],
['1', true],
[0, -1],
[-1, 0],
[1, -1],
[-1, 1],
[false, -1],
[-1, false]
];
const fails = [];
cases.forEach((c) => {
const [A, B] = c;
const r1 = A && B && (B > A);
const r2 = A && (B > A); // <-- simplified condition
const r = !!r1 === !!r2;
if (!r) fails.push({c: c, r1, r2});
});
if (fails.length > 0) {
console.log('Not all cases passed!');
console.log(fails);
} else {
console.log('All cases passed!');
}
.as-console-wrapper { min-height: 100%!important; top: 0; }
【讨论】: