为什么这段代码不起作用? Javascript if语句,否则if语句

时间:2017-12-04 14:56:18

标签: javascript

这是一个javascript代码,我想让它像: 如果该人回答是,请回答"那很酷"如果该人回答否,请回复#34;如果该人回答,我会让你开心#34;一个问题,即CONTAINS"是"或者"不",说"只键入是或否,没有任何额外的文本。"此外,如果此人没有回复说没有包含"是"或"不",回答"你甚至没有回答这个问题。" 但是,这段代码有些奇怪。如果我输入一些随机的内容,例如" hi",它会说"只键入是或否,没有任何额外的文本。",不是"你甚至没有回答问题。" 帮助!

var id;
id = prompt("Are you happy?");
if(id == "yes"){
alert("That's cool.");
}else if(id == "no"){
alert("I'll make you happy.");
}else if(id || "yes" || "no"){
alert("Type only yes or no, without any extra texts.");
}else{
alert("you didn't even answer the question.");
}

2 个答案:

答案 0 :(得分:5)

这一行:

else if(id || "yes" || "no")

不会测试id中是否包含值"yes""no"。它测试id是否真实*,或"yes"是真实的(它是),或"no"是真实的(它是)。因此,无论id的值是什么,总体情况总是如此。

由于您使用的是else if,因此您根本不需要检查"yes""no" - 如果您到达那里,就知道{{1} }中没有任何一个。所以只是

id

...会告诉您else if (id) 中有一些内容,但它不是id"yes"(因为您已经处理过它们)。

*“truthy” - 在强制转换为布尔值或在逻辑操作中使用时强制或被视为"no"。它是“虚假”的另一面,在相同的情况下强迫或被视为true。 JavaScript中的虚假值包括false0""nullundefined,当然还有NaN。所有其他值都是真实的(包括false,FWIW)。

答案 1 :(得分:1)

好的,问题就在于

if(id || "yes" || "no")

您检查id变量是否存在或字符串“yes”存在或字符串“no”存在。所以它总是如此。

如果要检查字符串是否包含某些值,可以通过正则表达式(more)或仅通过indexOf来执行此操作,例如:

var id;

id = prompt("Are you happy?");

if (id == "yes") {

  alert("That's cool.");
  
} else if(id == "no") {

  alert("I'll make you happy.");
  
} else if(id.indexOf('yes') >= 0 || id.indexOf('no') >= 0) {

  alert("Type only yes or no, without any extra texts.");
  
} else {

  alert("you didn't even answer the question.");
  
}

问候,KJ