Why does NaN === NaN
return false
in Javascript?
> undefined === undefined
true
> NaN === NaN
false
> a = NaN
NaN
> a === a
false
On the documentation page I see this:
Testing against NaN
Equality operator (
==
and===
) cannot be used to test a value againstNaN
. UseisNaN
instead.
Is there any reference that answers to the question? It would be welcome.
This behaviour is specified by the IEEE-754 standard (which the JavaScript spec follows in this respect).
For an extended discussion, see What is the rationale for all comparisons returning false for IEEE754 NaN values?
Strict answer: Because the JS spec says so:
Useful answer: The IEEE 754 spec for floating-point numbers (which is used by all languages for floating-point) says that NaNs are never equal.
Although either side of
NaN===NaN
contains the same value and their type isNumber
but they are not same. According to ECMA-262, either side of==
or===
containsNaN
then it will result false value.you may find a details rules in here-
http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3