【问题标题】:Number.isNaN('asd') === false in Node.js! What gives?Node.js 中的 Number.isNaN('asd') === false !是什么赋予了?
【发布时间】:2013-12-09 00:45:00
【问题描述】:

试试看:在 Node.js 或 Firefox 中,打开一个 REPL,然后输入:

Number.isNaN('asdf');

这怎么可能不是NaN?如果不是这个,NaN 是什么?

【问题讨论】:

  • 顺便说一句,我强烈推荐这个很棒的 JSConf 演讲——“关于 JavaScript 数字你永远想知道的一切——JSConf EU 2013”​​youtube.com/watch?v=MqHDDtVYJRI 它解释了低级(位级)详细说明“数字”是如何在 JS 中实现的,但任何人都可以理解。
  • Number.isNaN(Number('asdf'))

标签: javascript node.js nan


【解决方案1】:

这是 EcmaScript 6 标准的一部分。

Number.isNaN 在不强制参数的情况下返回值是否为 NaN。

Number.isNaN("xmfds"); // false
Number.isNaN("ose"); // false

isNaN将参数强制为Number类型后返回值是否为NaN。

isNaN("ose") -> isNaN( Number("ose") ) -> isNaN(NaN); // true

【讨论】:

    【解决方案2】:

    试试这个:

    function checkNaN(value)
    {
        return value !== value;
    }
    

    之所以有效,是因为(我相信)NaN 是 JS 中唯一不严格等于自身的东西。

    【讨论】:

      【解决方案3】:

      你在这里有一个误解。 NaN 表示不是数字这一事实并不意味着任何不是数字的东西都是NaN

      NaN 是浮点运算的特殊值,表示运算的未定义结果。例如,0 / 0 通常会生成 NaN

      更多信息herehere

      【讨论】:

      • 我在做什么,Number.isNaN(parseInt('asd'))
      • 它检查你传递的值是否是NaN,即一个浮点数,它表示不是数字的东西。仔细想想有点奇怪,但事实证明只有数字可以是NaNs。
      • 我想知道一个字符串是否可以用作有限整数。有什么好的方法可以做到这一点?
      【解决方案4】:

      请注意,好像Number.IsNaNhas limited support

      这个输出:

      console.log(Number.isNaN("blabla"));
      

      提供falsefalse !== NaN

      console.log(false !== NaN)
      console.log(false !== Number.NaN);
      

      这是reference

      当 Number.isNaN 用一个参数号调用时, 采取以下步骤:

      If Type(number) is not Number, return false.
      If number is NaN, return true.
      Otherwise, return false.
      

      此函数与全局 isNaN 函数 (18.2.3) 的不同之处在于 在确定之前它不会将其参数转换为数字 是否为 NaN。

      我是 l33t,因为我有 1337 声望。

      【讨论】:

      • +1:感谢第 6 版草稿,从未看过。
      【解决方案5】:

      language specification 中没有Number.isNaN() 的概念。唯一指定的函数是全局 isNaN (15.1.2.4),它将正确返回 true 任何不是数字或无法正确转换为数字的东西。

      Number.isNaN(在NaN 上返回true)可能是可能是下一个标准草案(参见remyabel' answer)的实现细节的一部分,isNaN 可以在内部使用。

      【讨论】:

        猜你喜欢
        • 2018-08-11
        • 1970-01-01
        • 2017-12-14
        • 1970-01-01
        • 2013-05-21
        • 1970-01-01
        • 2011-01-30
        • 2021-01-20
        • 1970-01-01
        相关资源
        最近更新 更多