【问题标题】:isNaN function in nodejsnodejs中的isNaN函数
【发布时间】:2014-07-27 11:58:15
【问题描述】:

为什么nodejs中的isNaN函数在以下情况下返回false

isNaN(''),isNaN('\n'),isNaN('\t')

这很奇怪。

有人有我认为 isNaN 代表的不是数字的想法吗?

谁能解释一下

提前致谢!

【问题讨论】:

    标签: node.js nan


    【解决方案1】:

    isNan() 旨在帮助检测“数学上未定义”的事物 - 例如0/0 -

    node
    > isNaN(0/0)
    true
    > isNaN(1/0)
    false
    > isNaN(Math.sqrt(-1))
    true
    > isNaN(Math.log(-1))
    true
    

    你在这个问题中得到的关于如何检测数字的其他建议是可靠的。

    【讨论】:

      【解决方案2】:

      isNaN 是一个“不是数字”的函数,它在没有数字作为参数时返回 true,在给定数字时返回 false

      【讨论】:

      • 我猜你的意思是在给出一个数字时说“假”。您可能需要编辑您的答案以更正它。
      【解决方案3】:

      NaN 是一个非常具体的东西:它是一个浮点值,根据 IEEE754 规范 (Wikipedia article) 设置了适当的 NaN 标志。

      如果要检查字符串中是否有数值,可以使用parseFloat(str) (MDN on parseFloat)。如果它没有找到任何有效的数字内容,或者在找到数字之前找到了无效字符,它将返回一个 NaN 值。

      所以请尝试使用isNaN(parseFloat(str)) - 它为我发布的所有三个示例提供true

      【讨论】:

      • 是的,这就是我正在使用的,但如果 isNaN 能做到这一点,它会更简单......
      • @A-0-: isNaN 有特定用途;根据 IEEE754 规范检测 NaN 值。它不存在一般的数字检查,这主要是在 parseFloat 中完成的,它的工作是从字符串构造数字。我们在这里只使用 isNaN 是因为 parseFloat 失败时返回一个 NaN 值;如果它抛出了一个错误,我们就不会使用 isNaN。不要将 isNaN 与一种 isNumeric 混淆 - isNaN 仅对数值而非字符串进行操作,并检查特定类型的值。
      【解决方案4】:

      因为你没有传递给它一个数字,它会将它转换为数字。所有这些都转换为0,即0,而不是NaN

      Number('')
      0
      Number('\n')
      0
      Number('\t')
      0
      isNaN(0)
      false
      

      请注意,NaN 不代表“不是 JavaScript 编号”。 In fact it's completely separate from JavaScript 并存在于所有支持 IEEE-754 浮点数的语言中。

      如果你想检查某个东西是否是一个javascript数字,检查是

      if (typeof value === "number") {
      
      }
      

      【讨论】:

      • 请注意,NaN 的值是一个 Javascript 数字 => typeof NaN === 'number' // true
      猜你喜欢
      • 2013-05-07
      • 1970-01-01
      • 2016-06-23
      • 2018-06-25
      • 2013-04-27
      • 2014-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多