JavaScript NaN 等价

JavaScript NaN equvialence

为了好玩,我试图将我设置为 NaN 的值与我也设置为 NaN 的另一个值进行比较。

为什么两个具有相同值的变量不相等?

var a = Number.Nan
var b = Number.Nan
a === b
false

a == b
false

var a = NaN
var b = NaN
a === b 
false
a == b
false

为什么会这样?

NaN 不是数字,没有要比较的评估数值 - 使用 IsNaN() 比较 NaN 值。 W3 Schools link

请记住,很多 JavaScript 都不是很好。它是在 10 天内设计的,其中很多(不是全部)可能不直观。这是您不考虑原因而只是使用 isNaN(someVar) 来检查它的时候之一。

正如@TechnicalChaos 所说,但这里是 W3School 上的 MDN 链接 ;)

南:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN

是南: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isNaN

相关部分是:

It is rather rare to use NaN in a program. It is the returned value when Math functions fail (Math.sqrt(-1)) or when a function trying to parse a number fails (parseInt("blabla")).

并且:

Unlike all other possible values in JavaScript, it is not possible to rely on the equality operators (== and ===) to determine whether a value is NaN or not, because both NaN == NaN and NaN === NaN evaluate to false. Hence, the necessity of an isNaN function.

不要把 NaN 想成和 nullundefined 一样的思路,它是 "special case" :P

但是如果你愿意为了一块饼干冒险:

NaN.toString() === NaN.toString()
true

但不要那样做!