0
var num1 = prompt("Enter first number: ", "number");
var num2 = prompt("Enter second number: ", "number");

if (num1 > num2) {

    document.write("<p>" + num1 + " is greater than " + num2 + "</p>");
} else {

    document.write("<p>" + num2 + " is greater than " + num1 + "</p>");
}

当我当时执行此代码时,它每次都执行 else 部分,那么它的解决方案是什么?非常感谢你。

4

6 回答 6

8

您正在比较字符串(这是prompt返回的内容,即使用户输入数字也是如此)。首先将值转换为数字:

if(+num1 > +num2){

prompt如果用户在s 中输入任何非数字,NaN则会产生 a,您可能会看到奇怪的结果。我会这样设置:

var num1 = +prompt("Enter first number: ", "number"),
    num2 = +prompt("Enter second number: ", "number");

if (!isNan(num1) && !isNaN(num2)) {
    if (num1 > num2) {

    } else if (num2 > num1) {

    } else {
        // Numbers equal
    }
} else {
    // At least one of them isn't a number
}
于 2013-05-21T23:02:44.387 回答
2

当您比较任意变量时,Javascript 对真/假有一个时髦的定义。您将希望 100% 确保您提示的两个参数的输入已转换为您期望的数字:

var num1 = parseInt(prompt("Enter first number: ", "number"));
var num2 = parseInt(prompt("Enter second number: ", "number"));

使用+运算符是一种很好的速记方式,但除了我上面的快速回答之外,您可能还需要添加一些检查以确保它们不会给您垃圾。

另外,请务必查看 Ian 的答案 - 它包含对+运算符以及如何将其用于强制的很好解释。

于 2013-05-21T23:03:37.517 回答
1

在比较之前,您需要将输入(字符串)解析为数字(整数/浮点数)。

使用 parseInt 或 parseFloat 像:(分别)

var num1 = parseInt(prompt("Enter first number: ", "number"));

var num2 = parseFloat(prompt("Enter second number: ", "number"));

于 2013-05-21T23:03:01.597 回答
0

prompt返回一个字符串,而不是数字。在比较之前,您需要将提示的结果转换为数字。

于 2013-05-21T23:05:02.137 回答
0
var num1 = parseFloat(prompt("Enter first number: ", "number"));
var num2 = parseFloat(prompt("Enter second number: ", "number"));

prompt返回一个String值,需要解析为数字。

于 2013-05-21T23:06:27.983 回答
0

在您的情况下,变量num1num2是字符串。在比较之前需要转换为 INT 类型:

var num1 = parseInt(prompt("Enter first number: ", "number"));

var num2 = parseInt(prompt("Enter second number: ", "number"));

未来提示:您可以通过 typeof() 获取变量的类型

于 2013-05-21T23:12:07.227 回答