JavaScript 表示 10 小于 9
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 + ".\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!");
}
}
提前致谢。如果您在我的代码中看到您想发表评论的内容,我很乐意听到反馈并变得更好,即使它与此没有直接关系;)
问题是,您正在使用字符串,如果您将两个字符串与 <
进行比较,它只会比较尽可能多的字符,直到找到一个更小的字符(更小的是它整数表示)比另一个:
console.log("10" < "9");
这里只会比较"1"
和"9"
,意思是char code 49和char code 57。
49 小于 57,表示整个表达式为 true
。您可以了解有关 ASCII 字符代码的更多信息 here.
您应该改用 Numbers:
console.log(Number("10") < Number("9"));
您只处理字符串,因为 prompt()
和 Number.toFixed()
return 字符串。如果您将它们封装在 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!");
}
}
Javascript提示return是一个字符串。事实上,输入文本框总是returns 字符串。因此,当您输入 10 时,它 returns "10" 并且 toFixed() 也将 return string.
因此您需要更正代码中的两行
number = parseInt((Math.random() * 10).toFixed(0));
guess = prompt("Guess a number from 1 to 10");
guess = parseInt(guess);
您还需要检查 NAN 条件以确保安全。
我正在尝试学习 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!");
}
}
提前致谢。如果您在我的代码中看到您想发表评论的内容,我很乐意听到反馈并变得更好,即使它与此没有直接关系;)
问题是,您正在使用字符串,如果您将两个字符串与 <
进行比较,它只会比较尽可能多的字符,直到找到一个更小的字符(更小的是它整数表示)比另一个:
console.log("10" < "9");
这里只会比较"1"
和"9"
,意思是char code 49和char code 57。
49 小于 57,表示整个表达式为 true
。您可以了解有关 ASCII 字符代码的更多信息 here.
您应该改用 Numbers:
console.log(Number("10") < Number("9"));
您只处理字符串,因为 prompt()
和 Number.toFixed()
return 字符串。如果您将它们封装在 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!");
}
}
Javascript提示return是一个字符串。事实上,输入文本框总是returns 字符串。因此,当您输入 10 时,它 returns "10" 并且 toFixed() 也将 return string.
因此您需要更正代码中的两行
number = parseInt((Math.random() * 10).toFixed(0));
guess = prompt("Guess a number from 1 to 10");
guess = parseInt(guess);
您还需要检查 NAN 条件以确保安全。