Javascript - Есть ли более понятный способ express "if (a && b ||! A &&! B)"? - PullRequest
1 голос
/ 06 января 2020

Хотел бы express "если оба / ни a, ни / b не верны", то есть логические значения a и b одинаковы

Ответы [ 2 ]

2 голосов
/ 06 января 2020

Вы можете использовать !(a ^ b) или !a === !b:

test(true, true);
test(false, false);
test(true, false);
test(false, 1); // 1 = truthy value
test(false, ""); // "" = falsy value

function test(a, b) {
  console.log(`!(${JSON.stringify(a)} ^ ${JSON.stringify(b)}) => ${!(a ^ b)}`);
  console.log(`!${JSON.stringify(a)} === !${JSON.stringify(b)} => ${!a === !b}`);
}
.as-console-wrapper {
    max-height: 100% !important;
}

^ является оператором исключающего или (XOR). Он преобразует свои операнды в числа (true => 1, false => 0) и выполняет XOR для них.

!a === !b работает, потому что любой ! преобразует любую правду значение false и любое ложное значение true, а затем вы можете напрямую сравнить их.

0 голосов
/ 07 января 2020

Есть много способов, но, поскольку люди не привыкли сравнивать булевы результаты на равенство, и потому что это опасная привычка - JS

if (a ? b : !b) {
    ...
}
, мне нравится: *1002*
...