为什么 isNaN 总是 return true
why does isNaN always return true
在尝试验证 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>
尝试了几个排列组合,但它似乎不起作用。谁能看出为什么这不起作用?
因为g
是一个字符串(你在连接一个字符串,所以它会被转换成一个)。
您写了:
var g = parseInt("40000000") + "<br />";
因此g
是一个字符串:'40000000<br />'
.
parseInt("40000000")
returns 一个整数,但是你向它附加了一个字符串。 Javascript 将数字隐式转换为字符串,然后将它们连接起来。
字符串不是数字,所以 isNaN
(正确)returns true
.
在您的代码中,由于您构建它的方式,g
的值将始终是一个字符串。
每当您将 String
和 Number
相加时,您将通过连接这两个值得到一个新的 String
。
因此,在您的代码中,isNaN(g)
将始终 return true
。
isNaN 表示不是数字。这意味着它是一个检查你的变量是否不是数字的函数。
在您的情况下,您将 <br>
连接到您的整数,这会将您的整数转换为字符串。
/**
* Created by jjansen on 10-Mar-15 4:38 PM.
* Whosebug
*/
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 并将此代码复制到您的控制台中。您现在可以看到差异
在尝试验证 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>
尝试了几个排列组合,但它似乎不起作用。谁能看出为什么这不起作用?
因为g
是一个字符串(你在连接一个字符串,所以它会被转换成一个)。
您写了:
var g = parseInt("40000000") + "<br />";
因此g
是一个字符串:'40000000<br />'
.
parseInt("40000000")
returns 一个整数,但是你向它附加了一个字符串。 Javascript 将数字隐式转换为字符串,然后将它们连接起来。
字符串不是数字,所以 isNaN
(正确)returns true
.
在您的代码中,由于您构建它的方式,g
的值将始终是一个字符串。
每当您将 String
和 Number
相加时,您将通过连接这两个值得到一个新的 String
。
因此,在您的代码中,isNaN(g)
将始终 return true
。
isNaN 表示不是数字。这意味着它是一个检查你的变量是否不是数字的函数。
在您的情况下,您将 <br>
连接到您的整数,这会将您的整数转换为字符串。
/**
* Created by jjansen on 10-Mar-15 4:38 PM.
* Whosebug
*/
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 并将此代码复制到您的控制台中。您现在可以看到差异