【问题标题】:Something strange happens with parseInt() [duplicate]parseInt() 发生了一些奇怪的事情[重复]
【发布时间】:2021-09-25 18:04:57
【问题描述】:

所以,我有以下问题:

let str = "M1"
console.log(parseInt(str.charAt(0)) != NaN))

出于某种原因,它说true。与1M 相同。
据我所知,NaN 是 number 类型。
不过,在这种情况下,我需要(parseInt(str.charAt(0)) != NaN) == false。如果是1M,则为true。
感谢您的每一个回答。

PS* parseInt(str) 返回NaN

【问题讨论】:

    标签: javascript


    【解决方案1】:

    因为:NaN 不等于 NaN

    let str = "M1"
    console.log(parseInt(str.charAt(0)) != NaN))
    

    parseInt(str.charAt(0)) 是一个 NaN 值,它不等于另一个 NaN 值。
    看看这个NaN - JavaScript | MDN

    【讨论】:

      【解决方案2】:

      它按预期工作。 NaN 是全局属性,不是数字类型。

      这里parseInt('M1'.charAt(0)) != NaN 将被测试为NaN !== NaN。由于NaN 是一个全局对象,这两个NaN 指向的不是同一个对象,而是两个不同的对象。所以它返回true

      在第二种情况下(parseInt('1M'.charAt(0)) !== NaN),很明显true 是1 !== NaN。

      注意:使用=== 而不是==

      【讨论】:

        【解决方案3】:

        您无法将 NaN 与 == 运算符进行比较。轻松查看if:

        let str = "M1"
        
        if(!parseInt(str.charAt(0)))
            console.log("NaN")

        【讨论】:

          【解决方案4】:

          而不是试图证明一个否定并证明某事不是 NaN(记住 NaN istelf 表示不是数字)并期待一个错误的......太多的双重否定

          试试isNaN(str[0])

          let str1 = "M1";
          let str2 = "1M";
          
          let result1 = isNaN(str1[0]);
          let result2 = isNaN(str2[0]);
          
          console.log(result1); // gives true - ie: str1[0] is not a number
          console.log(result2); // gives false -ie: str2[0] a number

          【讨论】:

            【解决方案5】:

            NaN === NaN 是假的,所以你不能只将它们与=== 或!== 进行比较

            您可以改用isNaN(parseInt(str.charAt(0))。

            【讨论】:

              猜你喜欢
              • 2011-12-05
              • 2011-09-16
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-08-16
              • 1970-01-01
              相关资源
              最近更新 更多