Ваша проблема не имеет ничего общего с &&
, но с синтаксисом ?:
и с синтаксисом операторов 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"));