为什么 isNaN 总是返回 true

why does isNaN always return true

本文关键字:返回 true isNaN 为什么      更新时间:2023-09-26

在尝试验证JS中的数字字符串时遇到一些麻烦。

<!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>

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

你写过:

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

因此g是一个字符串:'40000000<br />'

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

字符串不是数字,因此isNaN(正确)返回true

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

/**
 * 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 并在控制台中复制此代码。您现在可以看到差异

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

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

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

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