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
相同。
据我所知,NaN
是 number
类型。
不过,在这种情况下,我需要(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)
,很明显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))
。
【讨论】:
以上是关于parseInt() 发生了一些奇怪的事情[重复]的主要内容,如果未能解决你的问题,请参考以下文章
在我的(java spring mvc + mysql application,thymeleaf)中实现spring security之后,身份验证发生了一些奇怪的事情