JavaScript says 10 is lower then 9



我正在尝试学习JavaScript,当我开始MDN教程时,我尝试独自做第一个练习,到目前为止效果很好。但有一个非常奇怪的情况。

游戏生成一个从 1 到 100 的随机数,用户有 10 次猜测来找出该数字。

为此,我将游戏简化为 1 - 10。

当随机数是 9 并且我猜是 10 时,代码说我的输入太低了。我不明白为什么会这样。在所有其他情况下,它完全按预期工作。

出于调试原因,随机数将在第一次猜测后显示在对话框中。

这是我的代码:

var number = 0;
var turns = 0;
var guess = 0;
var won = false;
playGame();
function playGame() {
won = false;
number = (Math.random() * 10).toFixed(0);
guess = prompt("Guess a number from 1 to 10");
turns = 0;
while(turns < 10) {
console.log(number + " " + guess);
if(guess < number) {
turns++;
guess = prompt("Number is " + number + ".nnYou guessed " + turns + " Times already.nnYour guess was to low! Guess again:");
won = false;
} else if(guess > number) {
turns++;
guess = prompt("Number is " + number + ".nnYou guessed " + turns + " Times already.nnYour guess was to high! Guess again:");
won = false;
} else if(guess === number) {
alert("You got it!");
won = true;
break;
}
}
if(confirm("Wanna play again?")){
playGame()
} else {
alert("kkbye!");
}   
}

提前谢谢。如果你在我的代码中看到一些你想评论的东西,我很想听到反馈并变得更好,即使它与这个;)没有直接关系

问题是,您正在使用字符串,如果您将两个字符串与<进行比较,它只会比较尽可能多的字符,直到它找到一个比另一个字符更小的字符(更小是整数表示(:

console.log("10" < "9");

这里它只会将"1""9"进行比较,这意味着字符代码 49 与字符代码 57。

49 小于 57,表示整个表达式true。您可以在此处了解有关 ASCII 字符代码的更多信息。

您应该改用数字:

console.log(Number("10") < Number("9"));

您只处理字符串,因为prompt()Number.toFixed()都返回字符串。如果您将它们封装在Number()调用中,则您的游戏可以正常工作:

var number = 0;
var turns = 0;
var guess = 0;
var won = false;
playGame();
function playGame() {
won = false;
number = Number((Math.random() * 10).toFixed(0));
guess = Number(prompt("Guess a number from 1 to 10"));
turns = 0;
while(turns < 10) {
console.log(number + " " + guess);
if(guess < number) {
turns++;
guess = prompt("Number is " + number + ".nnYou guessed " + turns + " Times already.nnYour guess was too low! Guess again:");
won = false;
} else if(guess > number) {
turns++;
guess = prompt("Number is " + number + ".nnYou guessed " + turns + " Times already.nnYour guess was too high! Guess again:");
won = false;
} else if(guess === number) {
alert("You got it!");
won = true;
break;
}
}
if(confirm("Wanna play again?")){
playGame()
} else {
alert("kkbye!");
}   
}

Javascript 提示符返回一个字符串。实际上,输入文本框始终返回字符串。所以当你输入10时,它返回"10",toFixed((也将返回字符串。

所以你需要从代码中更正两行

number = parseInt((Math.random() * 10).toFixed(0));
guess = prompt("Guess a number from 1 to 10");
guess = parseInt(guess);

此外,您还需要检查NAN条件是否更安全。

最新更新