Да, вы можете.В JavaScript операторы сравнения приводят к логическим значениям, которые можно напрямую сравнивать с ==
/ ===
и !=
/ !==
, в этих сравнениях нет преобразования.(Их также можно сравнить с >
и <
, например: true
больше false
. В этом случае происходит преобразование, они преобразуются в числа, true
=> 1
&& false
=> 0
.)
Ваш первый блок кода перейдет в блок if
, если a > b
и a > c
, или если a <= b
и a <= c
.(Это не совсем то, что делает ваш второй блок, заметьте, поскольку Скотт Хантер указывает на .) Правильное сравнение будет следующим:
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;
}