JS和其他语言的简短比较

时间:2019-06-19 16:41:08

标签: javascript if-statement conditional-statements

我想知道我是否可以写这个

if ( (a > b) == (a > c) ) { ...

代替此

if ( (a > b) && (a > c) ) || ( (a < b) && (a < c) ) { ...

a,b和c是数字

2 个答案:

答案 0 :(得分:4)

您可以编写它,但是它们不是等效的表达式(尝试将所有3个变量都设为相同的数字)。

答案 1 :(得分:2)

是的,可以。在JavaScript中,比较运算符产生布尔值,可以将其与== / ===!= / !==直接进行比较,这些比较不涉及任何转换。 (也可以将它们与><进行比较,例如:true大于false。在这种情况下,涉及转换,它们转换为数字, true => 1 && false => 0。)

如果ifa > b,或者a > ca <= 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;
 }