我想知道我是否可以写这个
if ( (a > b) == (a > c) ) { ...
代替此
if ( (a > b) && (a > c) ) || ( (a < b) && (a < c) ) { ...
a,b和c是数字
答案 0 :(得分:4)
您可以编写它,但是它们不是等效的表达式(尝试将所有3个变量都设为相同的数字)。
答案 1 :(得分:2)
是的,可以。在JavaScript中,比较运算符产生布尔值,可以将其与==
/ ===
和!=
/ !==
直接进行比较,这些比较不涉及任何转换。 (也可以将它们与>
和<
进行比较,例如:true
大于false
。在这种情况下,涉及转换,它们转换为数字, true
=> 1
&& false
=> 0
。)
如果if
和a > b
,或者a > c
和a <= b
,则您的第一个代码块将分支到a <= c
块中。 (请注意,Scott Hunter points out并不能完全满足您的第二个步骤的要求。)正确的比较是:
if ( (a > b) == (a > c) ) {
等同于
if ( (a > b) && (a > c) ) || (a <= b) && (a <= c) ) {
让我们检查一下:
function check(a, b, c) {
// Your first code block
const r1 = (a > b) == (a > c);
// Your second, which isn't _quite_ the same
const r2 = ( (a > b) && (a > c) ) || ( (a < b) && (a < c) );
// My second
const r3 = ( (a > b) && (a > c) ) || ( (a <= b) && (a <= c) );
console.log(a, b, c, "=>", r1, r2, r3);
}
check(1, 2, 3);
check(2, 1, 3);
check(3, 2, 1);
check(1, 1, 2);
check(2, 2, 1);
check(2, 1, 2);
check(1, 1, 1);
.as-console-wrapper {
max-height: 100% !important;
}