我尝试将这些if语句转换为三元语:
var eatsPlants = false;
var eatsAnimals = true;
if(eatsPlants){
return 'herbivore';
}else if(eatsAnimals){
return 'carnivore';
}else if(eatsPlants && eatsAnimals){
return 'omnivore';
}else{
return undefined;
}
这是我的解决方案:
var category = eatsPlants && eatsAnimals ? "omnivore" : "herbivore" : "carnivore" : undefined;
console.log(category);
但这不起作用,它返回错误分号。
知道怎么解决吗?
答案 0 :(得分:2)
你忘了其他两个条件,并改变了检查的顺序(这实际上是使其工作所必需的)。你要么做
return (eatsPlants && eatsAnimals
? 'omnivore'
: (eatsPlants
? 'herbivore'
: (eatsAnimals
? 'carnivore'
: undefined)));
或者,通过嵌套来避免AND操作,
return (eatsPlants
? (eatsAnimals
? 'omnivore'
: 'herbivore')
: (eatsAnimals
? 'carnivore'
: undefined));
(括号和缩进是可选的,但强烈建议其可读性,至少其中一个)。
答案 1 :(得分:0)
您还应添加剩余的if
条件
var category = eatsPlants && eatsAnimals ? "omnivore" : eatsPlants? "herbivore" : eatsAnimals? "carnivore" : undefined;
console.log(category);
答案 2 :(得分:0)
您共享的js片段可能会抛出错误,因为return语句不在函数内。
创建了另一个变量returnResult
,根据条件,它将被赋予新值。
!1是假的& !0为真,void 0未定义
var eatsPlants = !1, eatsAnimals = !0, returnResult = "";
returnResult = eatsPlants ? "herbivore" : eatsAnimals ? "carnivore" : eatsPlants && eatsAnimals ? "omnivore" : void 0;