Javascript不足以覆盖其他不足的条件?

时间:2013-03-06 16:08:54

标签: javascript override if-statement

我正在这里用这个代码挣扎。在CodeAcademy上工作,我遇到了令我困惑的小事。如您所见,我首先检查computerChoice是否小于或等于0.33。然后我检查计算机选择是否小于或等于0.66,并用最终的else语句结束。

但是不应该以某种方式崩溃或干扰,因为你可以看到,else和else以及if都会将computerChoice变量设置为所需的字符串,具体取决于随机数是什么。但是,由于0.23小于0.66,而0.23小于0.33,因此if语句都应将变量设置为自己的特定字符串。

为什么这实际上有用,当我认为它不应该。这只是JavaScript的方式吗?第一个if语句会覆盖即将发布的语句吗?

var userChoice = prompt("Do you choose rock, paper or scissors?");
var computerChoice = Math.random();
if (computerChoice <= 0.33){
    computerChoice = "rock";
}else if(computerChoice <=0.66){
    computerChoice = "paper";
}else{
    computerChoice = "scissors";
}

感谢所有希望即将到来的帮助:)

3 个答案:

答案 0 :(得分:3)

else if部分仅在if条件为假时才会被评估。所以没有冲突,当你有一系列if...else if...else if...else时会使用第一个匹配条件。

所以在0.22案例中,因为

if (computerChoice <= 0.33)

评估true,未检查else ifelse条件。 Control进入与if关联的块,并将变量的值设置为"rock"

0.44情况下(例如),因为if条件评估为false,else if (computerChoice <= 0.66)被测试 - 并且因为它评估为true,所以与关联的块输入,变量的值设置为"paper"

如果所有值均高于0.66,则前两个条件都会评估为false,因此输入与最终else关联的块并将值设置为"scissors"

答案 1 :(得分:1)

如果else子句匹配,if..else语句if子句不会执行
换句话说,if..else中的一个且仅有一个代码块被执行,其余的则不执行。

答案 2 :(得分:0)

因为在第二个语句中使用了else而不会产生问题

else if(computerChoice <=0.66){
    computerChoice = "paper";

这也隐含地意味着computerChoice是&gt; 0.33。 它会在这样的情况下产生问题:

if(computerChoice <=0.66){
    computerChoice = "paper";
else if(computerChoice <= 0.33)
    computerChoice = "rock";

那是因为它永远不会输入else语句,就好像computerChoice是&lt; = 0.66它也总是显然&lt; = 0.33