【问题标题】:isNaN('Hello World!') vs isNaN('') [duplicate]isNaN('Hello World!') vs isNaN('') [重复]
【发布时间】:2020-12-27 12:56:09
【问题描述】:

我想知道为什么以下程序的行为不同,尽管数据类型是字符串,

console.log(isNaN('Hello World!'))

console.log(isNaN(''))

控制台显示如下结果,

true

false

我希望这两个结果都是正确的。

谁能帮我理解这个基本的东西。

谢谢。

【问题讨论】:

标签: javascript


【解决方案1】:

isNaN 将空字符串解释为 0,这使得 isNaN('') 为真,而对于字符串,isNaN('abc') 为假,因为它不是数字

【讨论】:

  • interprets empty string as 0 不准确
  • 空字符串被转换为 0 这不是 NaN - 希望这就是你要说的
【解决方案2】:

根据documentation

自从 isNaN 函数规范的最早版本以来,它对非数字参数的行为一直令人困惑。当 isNaN 函数的参数不是 Number 类型时,该值首先被强制转换为 Number。然后测试结果值以确定它是否为 NaN。因此,对于非数字,当强制转换为数字类型时会产生有效的非 NaN 数值(尤其是空字符串和布尔基元,当强制转换为数字值 0 或 1)时,“false”返回值可能是意料之外的;例如,空字符串肯定是“不是数字”。混淆源于这样一个事实,即“不是数字”一词对于表示为 IEEE-754 浮点值的数字具有特定含义。该函数应被解释为回答以下问题:“当强制转换为数值时,该值是 IEEE-754 'Not A Number' 值吗?”

您可能想使用Number.isNaN 而不是isNan,它的行为不同(我提供的链接中也提到了这一点)

【讨论】:

    【解决方案3】:

    console.log(isNaN('')); 
    // false: the empty string is converted to 0 which is not NaN
    
    console.log(isNaN(' ')); 
    // false: a string with spaces is converted to 0 which is not NaN

    更多详情请参考官方文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isNaN

    【讨论】:

      【解决方案4】:

      this所示

      如果值等于 NaN,则此函数 (isNanN()) 返回 true。否则返回

      全局 isNaN() 函数,将测试值转换为数字,然后对其进行测试。

      当您将给定值转换为数字时,您会得到这个

      Number("") = 0 
      Number("Hello World!") = NaN
      

      说明得到的结果。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-06
        • 2014-01-10
        相关资源
        最近更新 更多