如何在三元运算符语句中使用 &&?

How do I use && in a ternary operator statement?

我正在尝试理解三元运算符。但是,我现在很难过! 我想在声明中使用&&。

这是我尝试使用三元运算符创建的代码:

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);

您的问题与 && 无关,但与 ?: 语法有关,并且与整个 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"));

当您使用传统 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