JavaScript 说 10 小于 9

SHR*_*HRX 3 javascript inequality

我正在尝试学习 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 + ".\n\nYou guessed " + turns + " Times already.\n\nYour guess was to low! Guess again:");
            won = false;
        } else if(guess > number) {
            turns++;
            guess = prompt("Number is " + number + ".\n\nYou guessed " + turns + " Times already.\n\nYour 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!");
    }   
}
Run Code Online (Sandbox Code Playgroud)

提前致谢。如果您在我的代码中看到想要评论的内容,我很乐意听到反馈并变得更好,即使它与此没有直接关系;)

Luc*_*bel 7

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

这里它只会"1"与进行比较"9",即字符代码 49 到字符代码 57。

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

你应该使用数字来代替:

console.log(Number("10") < Number("9"));
Run Code Online (Sandbox Code Playgroud)

您只处理字符串,因为 和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 + ".\n\nYou guessed " + turns + " Times already.\n\nYour guess was too low! Guess again:");
            won = false;
        } else if(guess > number) {
            turns++;
            guess = prompt("Number is " + number + ".\n\nYou guessed " + turns + " Times already.\n\nYour 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!");
    }   
}
Run Code Online (Sandbox Code Playgroud)