【问题标题】:isNan() function in Javascript not identifying toString()Javascript 中的 isNan() 函数无法识别 toString()
【发布时间】:2018-06-25 00:40:36
【问题描述】:

下面的代码只是根据isNaN()函数的输入是否为数字来显示“真”或“假”。在 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>

【问题讨论】:

  • 你可能想使用Number.isInteger()
  • isNan (Not-a-Number) 将检查该值是否不是整数。如果它等于 Nan,它将返回 TRUE,否则,它将返回 false。您所做的是将对象转换为字符串。显然,用 isNan 检查它会返回 FALSE。
  • 都是in the docs
  • @Tibs 请避免在 cmets 中回答问题
  • 你正在传递数字并检查这不是数字请检查你在问什么

标签: javascript function user-defined-functions tostring implicit


【解决方案1】:

obj.atr 是1,这是一个数字。 isNaN 如果其输入“不是数字”,则返回 true。另一种思考方式是 isNaN 如果其输入 是 一个数字,则返回 false。您遇到的是预期行为。

要记住的另一件事:isNaN 检查值是否可以解释为数字,而不是存储为数字。 isNaN("1234") 将返回 false,因为 "1234"(字符串)可以转换为 1234(数字)

如果要检查该值是否实际存储为数字,可以typeof value === "number"

【讨论】:

  • 但我通过附加 toString() 函数将 obj.atr 的类型更改为字符串。请检查。
  • @Sami Kh 您将 1 转换为“1”。 "1" 被解释为 1,isNaN 将返回 false,因为 1 是一个数字。
  • @Adelin 因为Number.isInteger() 只对整数返回true。如果它是一个浮点值呢?
【解决方案2】:

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 时结果才为真。检查 Here

【讨论】:

    【解决方案3】:

    有两个isNaN 函数。

    全局isNaN 函数,将测试值转换为数字,然后对其进行测试。 这就是为什么即使您已将 obj.atr 转换为字符串,它也会被转换回数字并因此返回 false。

    Number.isNaN 不会将值转换为数字,并且不会为任何非数字类型的值返回 true。因此,它也会返回false,因为obj.atr 的类型是字符串。

    根据您在问题中提出的问题,我认为您可以按照@EKW 的建议选择typeof val === number

    【讨论】:

    • 假设 Number.isNaN 不计算字符串,因为数字不会 Number.isNaN(string) 返回 true?
    • 没有。它不会。根据 MDN 文档,“Number.isNaN() 方法确定传递的值是否为 NaN,其类型是否为 Number。它是原始全局 isNaN() 的更健壮版本。”因此字符串也会返回 false
    猜你喜欢
    • 2011-07-10
    • 2017-06-04
    • 1970-01-01
    • 2021-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-28
    • 2015-07-25
    相关资源
    最近更新 更多