For the second time today I noticed someone on twitter berating javascript over this little connundrum:

> NaN == NaN
false
> NaN === NaN
false
> NaN !== NaN
true
> |

> NaN == NaN
false
> NaN === NaN
false
> NaN !== NaN
true
>

Counterintuitively, it would seem that NaN does not equal NaN. But let’s think about this for a second. Is it really that strange or just a symptom of what the logical symbol NaN actually stands for?

Thing is, NaN stands for “Not a Number” and if memory serves comes right out of IEEE754 floating point arithmetic. It’s very handy for representing things like 0/0, different kinds of infinity and operations involving infinities. In short, it represents an *undefinable number*.

Now, what could possibly be the result of comparing two undefinable numbers?

Mathematically, I have no idea what the result should be … probably something we simply agreed upon? Like how the 0th power is 1. But in my naive understanding of these things it should produce random results. However, JavaScript is kind enough to always claim that NaN does not equal NaN, if for naught else than to remind us we are trying to do something stupid.

Can anyone tell me if other languages handle this differently? Just produce an error of some sort?

Also, please share this post with your local JavaScript newbie, I die a little every time I see that sort of tweet.

*Related*

You should follow me on twitter, here.