Как использовать && в выражении троичного оператора? - PullRequest
0 голосов
/ 26 июня 2019

Я пытаюсь понять троичные операторы. Однако я сейчас в тупике! Я хочу использовать && в заявлении.

Это код, который я пытаюсь создать с помощью троичного оператора:

if (eatsPlants === true &&  eatsAnimals === true) {
"omnivor";
} else { 
"undefined";
}

Вот что я пробовал:

(eatsPlants && eatsAnimals) ? "omnivore" : "undefind";

Вот весь код, который у меня есть:

var eatsPlants = true;
var eatsAnimals = true;
var category = 
eatsPlants ? "herbivore" : "carnivor";
eatsAnimals ? "carnivor" : "herbivor";
(eatsPlants && eatsAnimals) ? "omnivore" : "undefined";

console.log(category);

Ответы [ 2 ]

0 голосов
/ 26 июня 2019

Когда вы используете традицию if-else, оператор - это то, что вы помещаете в блок if-else.Простое помещение выражения (которое затем разрешается в значение) ничего не дает, кроме предоставления значения.Поэтому не происходит присвоения значения.

Для троичных операторов это выражение, которое разрешается в значение, которое можно присвоить некоторой переменной

let category ;
if (eatsPlants === true &&  eatsAnimals === true) {
  category = "omnivor"; // statement
} else { 
  category = "undefined";
}



let category2 = (eatsPlants === true &&  eatsAnimals === true)? "omnivor": "undefined"; // expression

0 голосов
/ 26 июня 2019

Ваша проблема не имеет ничего общего с &&, но с синтаксисом ?: и с синтаксисом операторов JavaScript в целом.

var category = 
eatsPlants ? "herbivore" : "carnivor";
eatsAnimals ? "carnivor" : "herbivor";
(eatsPlants && eatsAnimals) ? "omnivore" : "undefined";

- это три отдельных утверждения: одно назначение, зависящее от eatsPlants, и две оценки, результаты которых будут отброшены. Это будет делать то, что вы хотели:

var category = 
    (eatsPlants && eatsAnimals) ? "omnivore" :
    eatsPlants ? "herbivore" :
    eatsAnimals ? "carnivore" : "undefined";

Причиной, по которой это работает, являются правила приоритета, согласно которым ?: связывается справа; то есть предыдущий код эквивалентен

var category = 
    (eatsPlants && eatsAnimals) ? "omnivore" :
    (eatsPlants ? "herbivore" :
    (eatsAnimals ? "carnivore" : "undefined"));
...