【问题标题】:Why does Number.isNaN() return false for Strings?为什么 Number.isNaN() 对字符串返回 false?
【发布时间】:2017-12-14 03:43:06
【问题描述】:

据我了解,NaN 代表Not A NumberStrings 不一定是 Numbers,因此我希望下面的代码为 Strings 返回 true。然而,事实并非如此。

console.log(Number.isNaN("Stack Overflow"));

有人可以澄清一下吗?

【问题讨论】:

标签: javascript nan


【解决方案1】:

Number.isNaNisNaN 之间有区别

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/isNaN

isNaN() 函数判断一个值是否为 NaN。

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN

Number.isNaN() 方法判断传入的值是否为 NaN,其类型是否为 Number。它是原始全局 isNaN() 的更健壮版本。

您返回 false 的原因是“堆栈溢出”不是数字而是字符串。

console.log('Number.isNaN("Stack Overflow"): '+Number.isNaN("Stack Overflow"));
console.log('isNaN("Stack Overflow"): '+isNaN("Stack Overflow"));

【讨论】:

  • 越想越觉得迷惑!
【解决方案2】:

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN#Description

与全局 isNaN() 函数相比,Number.isNaN() 没有 遭受强制将参数转换为数字的问题。 这意味着现在可以安全地传递通常会转换的值 到 NaN,但实际上与 NaN 的值不同。这也意味着 只有数字类型的值,也就是 NaN,才返回 true

【讨论】:

    【解决方案3】:

    这返回真:

    console.log(isNaN("Stack Overflow"));

    而这返回 false:

    console.log(Number.isNaN("Stack Overflow"));

    【讨论】:

      【解决方案4】:

      这不是 Number.isNaN。

      console.log(isNaN("Stack Overflow"));

      【讨论】:

      • 但是有Number.isNaN
      • @MohitBhardwaj 是的,但它做了一些不同的事情
      • @AndrewBone 是的,但答案应该解释差异。或者虽然它在那里,但这种情况下应该使用isNaN()
      • @MohitBhardwaj 如果您想了解有关 Number.isNaN 的更多信息,请关注文档developer.mozilla.org/en/docs/Web/JavaScript/Reference/…
      • @Shiladitya 这是我在第一条评论中发布的同一个链接吗?我的意思是,如果您添加了两者之间的差异,您的答案可能会更有用。目前,当它说 It's not Number.isNan 时,它显然是错误的。
      【解决方案5】:

      我不得不这样做

      Number.isNaN(Number("Stack Overflow")) // returns true
      Number.isNaN(Number(false)) // returns false (unfortunately)
      Number.isNaN(Number(12)) // returns false
      Number.isNaN(Number(12.02)) // returns false
      

      【讨论】:

        【解决方案6】:

        这看起来很奇怪,但一旦理解 NaN 意味着严格意义上的“非数字”Why does typeof NaN return 'number'?(除以零等),这就是我使用的:

        typeof value === "number" && !isNaN(value)
        

        【讨论】:

        • 谢谢@dgolive。那时我还是个新手。
        【解决方案7】:

        试试看:

        console.log(isNaN("Stack Overflow"));

        【讨论】:

          【解决方案8】:

          根据MDN,非数字值首先被强制转换为数字,然后测试为 NaN。所以,JS中的空字符串("")被认为是假的,因此被转换为0,这绝对是一个数字。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-05-05
            • 2014-10-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多