-2

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

但是,这不应该以某种方式崩溃或干扰,因为如您所见,else if 和 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";
}

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

4

3 回答 3

3

仅当条件为假else if时才会评估该部分。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前两个条件都评估为 false,因此else输入与 final 关联的块并将值设置为"scissors"

于 2013-03-06T16:11:16.053 回答
1

如果else子句匹配,则不执行if..else语句的子句。 换句话说,里面只有一个代码块被执行过,其余的都没有。if
if..else

于 2013-03-06T16:11:39.963 回答
0

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

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

于 2013-03-06T16:21:40.083 回答