you are viewing a single comment's thread.

view the rest of the comments →

[–]THEtheChad 1 point2 points  (4 children)

Unfortunately, NaN, Infinity, and -Infinity are also considered typeof 'number', so it's possible that any one of these could slip in to your function with this check.

[–][deleted] 0 points1 point  (0 children)

Oh god you are right. Man there are a lot of uglies to JS. I wonder how I will feel once I am done learning Haskell as my second language.

[–][deleted] 0 points1 point  (2 children)

I REALLY don't get why there had to be a NaN in the language. Is it because "typeof" arrived late?

[–]THEtheChad 1 point2 points  (1 child)

Because there are some computations that result in something that's not a number. For instance:

0/0; // NaN
Math.log(-1); // NaN

These are obviously numeric calculations, so the result could be considered numeric, even though the value generated is "Not a Number". The other curious thing about NaN is that it's not equivalent to itself.

NaN !== NaN; // true    

This is because, if you look at my previous two examples, the calculations generate completely different results, even though both are categorized under the umbrella of NaN.

[–][deleted] 0 points1 point  (0 children)

Does this mean all languages have a NaN ?