JavaScript说10比9低

JavaScript说10比9低,javascript,inequality,Javascript,Inequality,我正在尝试学习JavaScript,当我开始学习MDN教程时,我尝试单独做第一个练习,到目前为止效果还不错。但有一个非常奇怪的情况 游戏生成一个从1到100的随机数,用户有10次猜测来找出这个数字 为此,我将比赛简化为1比10 当随机数是9,我猜是10时,代码说我的输入太低了。我不明白这是为什么。在其他任何情况下,它都完全按照预期工作 出于调试原因,第一次猜测后,对话框中将显示随机数 这是我的代码: var number = 0; var turns = 0; var guess = 0; va

我正在尝试学习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!");
    }   
}
var编号=0;
var=0;
var=0;
var won=假;
游戏();
函数playGame(){
赢=假;
number=(Math.random()*10).toFixed(0);
猜测=提示(“猜测1到10之间的数字”);
匝数=0;
while(圈数<10){
console.log(数字+“”+猜测);
如果(猜测<数字){
转向++;
猜测=提示(“数字为“+Number+”\n\n您已经猜了“+turns+”次了。\n\n您的猜测太低了!再次猜测:”;
赢=假;
}否则如果(猜测>数字){
转向++;
猜测=提示(“数字为“+Number+”\n\n您已经猜了“+turns+”次了。\n\n您的猜测太高了!再次猜测:”;
赢=假;
}else if(猜测===数字){
警惕(“你明白了!”);
韩元=真;
打破
}
}
如果(确认(“想再玩吗?”){
游戏
}否则{
警惕(“再见!”);
}   
}

提前谢谢。如果您在我的代码中看到一些您想评论的内容,我希望听到反馈并变得更好,即使这与此没有直接关系;)

问题是,您正在使用字符串,如果您将两个字符串与
进行比较,Javascript提示符将返回一个字符串。事实上,输入文本框总是返回字符串。因此,当您输入10时,它将返回“10”,toFixed()也将返回字符串

因此,您需要更正代码中的两行

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

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

函数的
prompt()
总是返回一个字符串,因此不会用数值进行比较。我将尝试将其转换为数字,谢谢您的输入。我认为强制应该是this的正确关键字@Pointy说,使用parseInt(guess)从字符串中获取数字。toFixed()也将返回字符串。字符串“10”比字符串“9”小。词法顺序与数字顺序。你还需要检查NAN条件以确保更安全:)感谢检查NAN的输入,这是一个很好的观点!JavaScript(如Java、.NET、VB4/5/6等)使用UTF-16,而不是ASCII。UTF-16是字符集的字符编码。