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.atr1 ,这是一个数字。 如果输入是“不是数字”, 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

链接地址: http://www.djcxy.com/p/94993.html

上一篇: isNan() function in Javascript not identifying toString()

下一篇: Only allow certain types for properties