2013-03-06 52 views
-2

我在这里用这段代码在这里挣扎。在CodeAcademy上工作,我遇到了这个让我感到困惑的小东西。如您所见,我首先检查计算机选项是否小于或等于0.33。然后检查计算机的选择是否小于或等于0.66,并用最后的else语句结束。JavaScript比重写其他条件更少吗?

但是,不应该这样崩溃或以某种方式干涉,因为你可以看到,其他if和else以及if将根据随机数是什么将computerChoice变量设置为所需的字符串。但是由于0.23小于0.66,就像0.23小于0.33一样,两个if语句都应该将变量设置为自己的特定字符串。

为什么这实际上工作,当我认为它不应该。这只是JavaScript的方式吗?第一个if语句覆盖即将到来的语句?如果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"; 
} 

感谢所有希望即将举行的帮助:)

回答

4

else if部分将只进行评估。所以没有冲突,当你有一系列if...else if...else if...else时,会使用第一个匹配条件。

所以在0.22情况下,由于

if (computerChoice <= 0.33) 

评估true,没有一个else ifelse条件进行检查。控制进入与if关联的块,并将该变量的值设置为"rock"

0.44情况下(例如),这是因为if条件计算假,else if (computerChoice <= 0.66)测试  —并且因为它判断为真,与相关联的块被输入并且变量的值被设置为"paper"

在所有值以上0.66的情况下,两者的前两个​​条件评估假等输入与最终else关联的块和将值设置为"scissors"

+0

啊,我明白了。谢谢你:) – user2097217 2013-03-06 16:44:31

1

if..else陈述else子句不执行如果if子句匹配。
换句话说,if..else中的一个且仅有一个代码块曾经执行过,其余的不是。

0

,因为你在第二个语句

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

此使用的其他事物不会产生问题,也隐含意味着computerChoice是> 0.33。 它会在这样的情况下产生问题:

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

这是因为它永远不会进入else语句仿佛computerChoice是< = 0.66这也是始终明显< = 0.33