parseInt() 发生了一些奇怪的事情[重复]

Posted

技术标签:

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

所以,我有以下问题:

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

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

【问题讨论】:

【参考方案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),很明显true1 !== 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))

【讨论】:

以上是关于parseInt() 发生了一些奇怪的事情[重复]的主要内容,如果未能解决你的问题,请参考以下文章

C4裁剪图像发生了一些奇怪的事情

当我使用js操作DOM时发生了一些奇怪的事情

在我的(java spring mvc + mysql application,thymeleaf)中实现spring security之后,身份验证发生了一些奇怪的事情

重新加载数据时的 UICollectionView 奇怪的动画(幽灵单元、flash)

带有透明边框的 SKSpriteNode 发生了奇怪的事情

我的表格视图发生了奇怪的事情