这是一个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.");
}
答案 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中的虚假值包括false
,0
,""
,null
,undefined
,当然还有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