Можно ли упростить эти JavaScript троичные операторы? `переменная? variableB: false` в `variableA && variableB` - PullRequest
1 голос
/ 24 апреля 2020

Если у меня есть две неизвестные переменные, объявленные где-то в верхнем файле с именами variableA и variableB.

Где-то в программе, я встречал эти троичные операторы

const result = variableA ? variableB : false;

Я бы хотел, чтобы мой код был чище, но я не уверен, что смогу рефакторинг верхнего кода ниже

const result = variableA && variableB;

Эти две строки идентичны?


Есть другой случай выглядит так:

Где-то в программе:

const result = (variableA && !variableB) || !variableA;

Можно ли упростить приведенный выше код ниже?

const result = variableA && !variableB;

Ответы [ 2 ]

2 голосов
/ 24 апреля 2020

Эти две строки идентичны?

Если variableA, если Falsey, всегда будет false, да, они идентичны, иначе они не будут :

const variableA = 0;
console.log(
  variableA ? variableB : false,
  variableA && variableB
);

Где-то в программе:

Они тоже не идентичны, потому что (variableA && !variableB) || !variableA, будет true, если variableA верно, но variableB нет - но variableA && !variableB требует variableA, чтобы быть фальшивым.

const variableA = 0;
console.log(
  (variableA && !variableB) || !variableA,
  variableA && !variableB
);
0 голосов
/ 24 апреля 2020

Разница между a и b в этих определениях

var a = variableA ? variableB : false;
var b = variableA && variableB;

заключается в том, что a будет либо false (если variableA ложно) или variableB (если variableB верно ), whereas b will be either переменная A or переменная B`.

Теперь, если variableA и variableB уже либо true, либо false , тогда нет никакой разницы.

И если вы используете их в положении, где важна только достоверность значений (например, в if), то и разницы нет.

Если вы всегда хотите получить либо true, либо false в качестве результата (независимо от заданных значений c variableA и variableB), тогда будет получено двойное отрицание !! ты там:

var c = !!(variableA && variableB);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...