Javascript:为什么我的价值观等于?

时间:2017-07-18 20:10:49

标签: javascript

var check = true;
var number = Math.floor(Math.random() * 20);

while (check === true){
var guess = prompt("I picked a number 0 to 20, try to guess it!");
if (number === guess) {
    print("You guessed correctly! Good job!"); 
    check = false;
}
else if (number < guess) {
    print("\n\You guessed too high!"); 
}
else if (number > guess) {
    print("\n\You guessed too low!"); 
}
else {
    print("\n\Error. You did not type a valid number");
    exit(); 
}
    print("\n\Guess: " + guess + ".");
}  

当我尝试运行此程序时,我会一直得到正确的答案,但它不起作用!即使随机生成的数字是13,我估计13,它会通过,它会说它无效。

5 个答案:

答案 0 :(得分:2)

你的猜测是一个字符串。这是用户输入的文本,您需要将其转换为数字,以便能够将其与您的猜测进行比较,以便替换

var guess = prompt("I picked a number 0 to 20, try to guess it!");

var guess = Number(prompt("I picked a number 0 to 20, try to guess it!");

如果格式不正确,这会将您的用户猜测转换为数字或特殊值NaN。

您还可以使用==运算符,它将自动在类型之间进行转换。如果你是javascript的新手,我建议不要使用运算符,因为它可能会有一些令人困惑和意外的行为。

答案 1 :(得分:1)

您正在将prompt(字符串)的返回值与Math.floor(数字)的返回值进行比较。

由于您使用的是===且它们是不同的数据类型,因此您永远不会得到匹配。

使用==或明确地将数字转换为字符串,反之亦然。

number === +guess

答案 2 :(得分:1)

===是严格类型的,所以它不会将int与字符串进行比较。

将guess转换为整数。您应首先验证它,以防用户输入除int之外的其他内容。

var guessInt = +guess; // the plus converts to an integer
if(isNaN(guessInt)) 
    continue;
if (number === guessInt) {
    print("You guessed correctly! Good job!"); 
    check = false;
}

答案 3 :(得分:0)

您正在使用triple =运算符来检查类型相等性。将提示值(您的guess变量)与number变量进行比较时。您正在比较StringNumber。为了完成这项工作,您可以使用

number == guess

Number(guess)

答案 4 :(得分:0)

您正在使用严格的相等比较,它也会比较类型。 queue返回字符串值。使用prompt转换为数字。

parseInt

第二个参数表示数字基数(10表示十进制数,16表示十六进制数等)。在非严格模式(也称为草率模式)中,在解析具有前导零的字符串时,您可能会偶然转换为八进制(基数为8)。始终指定基础以避免这种情况。

您可能需要learn more about JavaScript strict mode