为什么这段代码显示"paper"?

Why does this code displays "paper"?

我正在尝试这个 JavaScript 代码,这是 Codeacademy 网站上的一个练习。 但问题是它在控制台中显示“paper”。它应该显示“scissors”? 问题是什么?我做错了什么吗?

这是JavaScript:

var userChoice= prompt("Do you choose rock, paper or scissors");
var computerChoice=0.35;
console.log(computerChoice);
if(0<computerChoice<0.33){
    computerChoice="rock";
}
else if(0.34<computerChoice<0.66){
    computerChoice="scissors";
}
else{
    computerChoice="paper";
}
console.log(computerChoice);

你不能写这样的表达式

if(0 < computerChoice < 0.33)

在 Javascript 中。你必须把它分成两个表达式:

if(0 < computerChoice && computerChoice < 0.33)

您需要将小于、大于检查分成两部分。

if(computerChoice>0 && computerChoice<0.33){

同样的事情需要对另一个做。

这是错误的语法。 a < b < c 无效 JavaScript。您必须在块中创建两个条件。

if ( 0 < computerChoice < 0.33)

应该是

if (computerChoice > 0 && computerChoice < 0.33)

查看此代码段。

var cpuChoice = document.getElementById("cpu-selection");

var userChoice = prompt("Do you choose rock, paper or scissors");
var computerChoice = 0.35;
//console.log(computerChoice);
if (computerChoice > 0 && computerChoice < 0.33) {
    computerChoice = "rock";
}
else if (computerChoice > 0.34 && computerChoice < 0.66) {
    computerChoice = "scissors";
}
else {
    computerChoice = "paper";
}

cpuChoice.innerHTML = computerChoice;
<p id="cpu-selection"></p>

我认为基于范围的不等式在 JavaScript 中是非法的,左右不等式。因为 JavaScript 是弱类型的,我猜它会评估一个不等式并得到一个真值或假值,然后将其转换为一个数字。

我的猜测是 0 < 计算机选择为真,如果大于则将转换为 1。 33,对于第二个 if .34 < computer choice which is true and cast to 1 which is > .66 所以那是假的,所以 else 语句被评估

试试 0 < computerChoice&& computerChoice < .33

编辑:我回到电脑前进行了测试,我在 google chrome

中体验了这些结果
true < 1 // false
true > 1 // false
true == 1 // true

(注意:经验可能有所不同,我不会将这种行为称为定义明确的典型强类型语言,但它可能在 JavaScript 中定义为这种行为)

x < y < z 

被评估为

(x < y) < z

在你的情况下,

0 < computerChoice < 0.33
>> (0 < computerChoice) < 0.33
>> true < 0.33
>> false //always

*旁注:这同样适用于相等运算符。 x == y == z

嗯,这对您不起作用的原因是因为 TRUE 不小于 0.66。表达式将像这样计算 (0.36 < computerChoice ) => true if (computerchoice = 0.35 ) 现在下一部分是 ( true < 0.66 ),这是错误的。所以 expression 的计算结果为 false。 Approach: 0.34<computerChoice==computerChoice<0.66 快乐编码:)

自从您使用了这个:

if(computerChoice < 0.33){ ... }

你的下一个语句是 else if,你实际上可以从你的第二个 if 中删除 0.34<,因为它已经给出它大于 0.34,因为 if之前是假的。

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

您也不需要检查 computerChoice 是否小于 0,因为 Math.random 总是 returns 值介于 0 和 1 之间。