为啥 parseInt(key) === NaN 总是评估为 false

Posted

技术标签:

【中文标题】为啥 parseInt(key) === NaN 总是评估为 false【英文标题】:Why parseInt(key) === NaN always evaluates to false为什么 parseInt(key) === NaN 总是评估为 false 【发布时间】:2017-01-09 06:17:12 【问题描述】:

我正在根据字典键做决定,我只有两种类型的键,数字和字母,

var _dict =  'a':'one', 'b':'two', '1':'three' ;

$.each( _dict, function( key, value )

  if( parseInt( key ) === NaN ) 

     // this statement always evalute to false

     else 

    

);

如果我打印console.log(parseInt('a')),它也会返回NaN

我已经从这个问题javascript parseInt return NaN for empty string找到了解决方案

但我想知道为什么它总是评估为假。

【问题讨论】:

NaN != NaN,使用isNaN(parseInt( key )) 或在你的情况下使用!parseInt( key ) 因为 IEEE 754 是这么说的 和 NaN !== NaN 因为它在开始时是这样,现在更改它可能会破坏 www(或它的一部分) 【参考方案1】:

那是因为NaN 被定义为不等于任何东西(包括它自己)。检查它:

>> NaN === NaN
False

您应该改用 isNaN() 函数:

>> isNaN(NaN)
true
>> isNaN(0/0)
true
>> isNaN(parseInt('a'))
true

【讨论】:

以上是关于为啥 parseInt(key) === NaN 总是评估为 false的主要内容,如果未能解决你的问题,请参考以下文章

为啥 parseInt 使用 Array#map 产生 NaN?

为啥 parseInt("0x") 返回 NaN [重复]

为啥我在使用 parseINt 或 undefined 时得到 NaN?

为啥 NaN 大于 JavaScript 中的任何数字? [复制]

为啥“valueAsNumber”返回 NaN 作为值?

parseInt 总是返回 NaN?