【问题标题】:why does isNaN always return true为什么 isNaN 总是返回 true
【发布时间】:2015-05-12 03:06:03
【问题描述】:

在尝试验证 JS 中的数字字符串时遇到了一些麻烦。尤其是 isNaN 似乎行为不端。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>No Quirks!</title>
</head>
     <body>
        <h1>JavaScript Test</h1>

        <button onclick="myNanIsTrue()">Is it a number?</button>

        <p id="writeToHTML"></p>

        <script type="text/javascript">
        function myNanIsTrue() {
             var g = parseInt("40000000") + "<br />";
             var n = g;
             if (isNaN(g)){
                  g="moo!";
             }
             n += g + "<br />";
             document.getElementById("writeToHTML").innerHTML = n;
        }
        </script>
     </body>
</html>

尝试了几种排列方式,但它似乎不起作用。谁能明白为什么这不起作用?

【问题讨论】:

  • 因为"40000000&lt;br /&gt;" 不是数字,而是字符串?另一方面,isNaN(parseInt("40000000")) 按预期返回 false
  • @h2ooooooo 谢谢。该死的留下标签!

标签: javascript nan parseint


【解决方案1】:

你写过:

var g = parseInt("40000000") + "<br />";

因此g 是一个字符串:'40000000&lt;br /&gt;'

parseInt("40000000") 返回一个整数,但随后您将一个字符串附加到它。 Javascript 将数字隐式转换为字符串,然后将它们连接起来。

字符串不是数字,所以isNaN(正确)返回true

【讨论】:

    【解决方案2】:

    isNaN 表示不是数字。这意味着它是一个检查变量是否不是数字的函数。 在您的情况下,您将&lt;br&gt; 连接到您的整数,这会将您的整数转换为字符串。

    /**
     * Created by jjansen on 10-Mar-15 4:38 PM.
     * stackoverflow
     */
    var noNumber = parseInt("40000") + "<br>"; //this is now a String
    var test = isNaN( noNumber ); //returns true
    console.log("noNumber isNaN: " + test);
    var number = parseInt("40000"); //this is a integer
    test = isNaN( number );
    console.log("number isNaN: " + test);
    


    按 f12 并将此代码复制到您的控制台中。您现在可以看到不同之处

    【讨论】:

      【解决方案3】:

      因为g 是一个字符串(你正在连接一个字符串,所以它将被转换为一个)。

      【讨论】:

        【解决方案4】:

        在您的代码中,g 的值将始终是一个字符串,这取决于您构建它的方式。

        当您将StringNumber 相加时,您将通过连接这两个值得到一个新的String

        因此,在您的代码中,isNaN(g) 将始终返回 true

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-01-29
          • 2012-04-03
          • 2021-09-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多