-2
<html>
    <head>
        <title>Greatest of three</title>
    </head>

    <body>
        <script type="text/javascript">
            var a = parseInt(prompt("Enter A"));
            var b = parseInt(prompt("Enter B"));
            var c = parseInt(prompt("Enter C"));

            if(a == b && b == c)
                document.write("A , B and C are equal! Give distinct numbers.")
            else if(a == b)
                document.write("A and B are equal! Give distinct numbers.");
            else if(b == c)
                document.write("B and C are equal! Give distinct numbers.");
            else if(c == a)
                document.write("A and C are equal! Give distinct numbers.");
            else if(a > b) {
                if(a > c)
                    document.write("A is the greatest");
                else
                    document.write("B is the greatest");
            }
            else {
                if(b > c)
                    document.write("B is the greatest");
                else
                    document.write("C is the greatest");
            }
        </script>
    </body>
</html>

当没有输入任何内容时,为什么会说“C 是最伟大的”?如果在给出 NULL 时我必须打破它,我会怎么做?

4

6 回答 6

7

如果什么都不输入,这行代码

var a = parseInt(prompt("Enter A"));

将返回 for 的值NaNa和其他变量)。

由于既不是NaN == NaN也不是NaN < NaN结果true,您的所有if- 语句都将解析为 else 块,最终产生document.write("C is the greatest");

要像这样检查这种用途isNaN()

if ( isNaN( a ) ) {
  // some code to handle this
}
于 2013-01-04T15:24:21.990 回答
2

如果您没有提供任何提示;然后a = parseInt(prompt("Enter A"))使a = NaN(NaN 表示不是数字)。然后条件失败;NaN < NaN是假的NaN == NaN。基本上任何一侧为 NaN 的比较总是错误的。通过您的逻辑,这将打印“C 是最伟大的”

于 2013-01-04T15:24:09.413 回答
1
    if(b>c)
        document.write("B is the greatest");
    else 
        document.write("C is the greatest");

这里在整个逻辑中,您只是在检查a>b, a>c... 但您没有检查NaN,要检查值是NaN,请使用isNaN()

于 2013-01-04T15:24:56.910 回答
0

在三元逻辑中,涉及 Null 的关系总是返回 false。甚至两个 Null 值之间的比较。Javascript 中的 NaN 值遵循这些规则。

因此,else总是选择路径。

于 2013-01-04T15:24:33.420 回答
0

因为这会被触发。

else
{
    if(b>c)
        document.write("B is the greatest");
    else 
        document.write("C is the greatest");
}   

如果没有输入b将 ==c所以最终else(C 是最大的)被触发。

您需要检查您是否有输入。你可以通过在整个东西周围包裹一个额外的块来做到这一点:

if( a && b && c ) {
   // your if statements
}
else {
   alert("No input!")
}
于 2013-01-04T15:24:53.790 回答
0

因为 a = NaN

比较 NaN == NaN 是假的!

<body>
    <script type="text/javascript">
        var a = parseInt(prompt("Enter A"));
        var b = parseInt(prompt("Enter B"));
        var c = parseInt(prompt("Enter C"));
        document.write(a);// << os NaN
        document.write(a == b); //<< Is False!!
    if(a==b && b==c)
        document.write("A , B and C are equal! Give distinct numbers.") 
    else if(a==b)
        document.write("A and B are equal! Give distinct numbers.");
    else if(b==c)
        document.write("B and C are equal! Give distinct numbers.");
    else if(c==a)
        document.write("A and C are equal! Give distinct numbers.");

    else if(a>b)
    {
        if(a>c)
            document.write("A is the greatest");
        else
            document.write("B is the greatest");
    }
    else
    {
        if(b>c)
            document.write("B is the greatest");
        else 
            document.write("C is the greatest");
    }   
    </script>
</body>
于 2013-01-04T15:26:47.037 回答