Для троичной операции всегда требуется три операнда, например:
inputExpression ? outputExpressionIfTrue : outputExpressionIfFalse
Код, о котором идет речь, использует выходные данные некоторых троичных операций в качестве входных выражений для других, что можно увидеть более четко, если мыотформатируйте его как в этом фрагменте кода.В каждом случае внешняя операция возвращает результат любой внутренней операции (и комментарии объясняют, какая внутренняя операция выполняется и что она возвращает).
var eatsPlants = false;
var eatsAnimals = false;
var category;
category = eatsPlants
? (eatsAnimals ? "omnivore" : "herbivore") // doesn't run because eatsPlants is false
: (eatsAnimals ? "carnivore" : undefined); //returns undefined because eatsAnimals is false
console.log(category);
category = eatsAnimals
? (eatsPlants ? "carnivore" : undefined) // doesn't run because eatsAnimals is false
: (eatsPlants ? "herbivore" : "omnivore"); // returns "omnivore" because eatsPlants is false
console.log(category);
Обратите внимание, что для обработки информации о категориях вещей со схожими свойствами может быть полезно использовать объекты, например:
const carnivore = {
eatsPlants: false,
eatsAnimals: true
};
const herbivore = {
eatsPlants: true,
eatsAnimals: false
};
const omnivore = {
eatsPlants: true,
eatsAnimals: true
};
console.log("carnivore:");
console.log(" eatsPlants: " + carnivore.eatsPlants);
console.log(" eatsAnimals: " + carnivore.eatsAnimals);
console.log("herbivore:");
console.log(" eatsPlants: " + herbivore.eatsPlants);
console.log(" eatsAnimals: " + herbivore.eatsAnimals);
console.log("omnivore:");
console.log(" eatsPlants: " + omnivore.eatsPlants);
console.log(" eatsAnimals: " + omnivore.eatsAnimals);