Javascript中的isNan()函数不能识别toString()
下面的代码只是根据isNaN()函数的输入是否是数字来显示“true”或“false”。 在isNaN()函数中,我使用toString()函数将数字类型转换为字符串。 但是,我得到的结果是'假'而不是'真'
<html>
<head>
<title>check</title>
<script type='text/javascript'>
function checkRun(){
var obj = {
atr : 1,
prof : 'dtc'
}
alert(isNaN(obj.atr.toString()));
}
</script>
</title>
</head>
<body>
<input type='text' name='checkName' id='check1' value='val1' class='class1'/><br><br>
<button type='button' name='checkName' id='check3' value='val3' class='class3' onclick='checkRun()'>Hello</button>
</body>
</html>
obj.atr
是1
,这是一个数字。 如果输入是“不是数字”, isNaN
返回true。 另一种想法是,如果输入是一个数字, isNaN
将返回false 。 你正在经历的是预期的行为。
另一件事要记住:isNaN检查值是否可以解释为一个数字,而不是它被存储为一个数字。 isNaN("1234")
将返回false,因为"1234"
(字符串)可以转换为1234
(数字)
如果你想检查值是否实际存储为一个数字,你可以做typeof value === "number"
isNaN函数是%isNaN%
内部对象。 当使用一个参数号调用isNaN函数时,将执行以下步骤:
1. Let num be -> ToNumber(number). /because of this toString() not consider
2. If num is NaN, return true.
3. Otherwise, return false.
注意:ECMAScript代码测试值X是否为NaN的可靠方法是表达式X!== X.当且仅当X是NaN.check时,结果将为true
有两个isNaN
函数。
全局isNaN
函数将测试值转换为Number,然后对其进行测试。 这就是为什么即使你已经将obj.atr
转换为一个字符串,它会被转换回一个数字,并因此返回false
。
Number.isNaN
不会将这些值转换为Number,并且对于任何非Number类型的值都不会返回true。 所以,它也会返回false
因为obj.atr
的类型是字符串。
根据你在问题中提出的问题,我认为你可以按照@EKW建议的typeof val === number
上一篇: isNan() function in Javascript not identifying toString()