There's probably some cutting insight into programmer culture here somewhere.
It is definitively not a number in the usual, mathematical sense -- hence the name, which comes from IEEE 754.
However, the isNumber function doesn't really check if things are numbers, it checks if they are of the Number type, which, potentially confusingly, includes things which are not numbers, including the accurately named value Not-a-Number (NaN).
That would imply then that isNumber is named incorrectly. So perhaps isNumber should read isNumericType?
Most of the time I want to test, is this a number I can use in a normal mathematical sense. As in, can I use it in subtraction, multiplication etc. I know now that I should use isFinite and isNumber, but wouldn't it be nice to have just one well named function for this?
We use NaN for masking in image processing, for instance for filtering out defective pixels. If a pixel has value NaN, it is ignored across the board.
My own interpretation? While programmers shouldn't care so much about this particular kind of semantics (instead they should understand the theory behind floats and never have to run into this issue) it might be better just to call NaNs something else, like "undefined number" or something.
Or, better, call the JavaScript type that represents IEEE-754 Binary64 format -- which includes the union of three sets (finite numbers in a given range, two infinite numbers, and two kinds of Not-a-Number values) something other than "Number".
The type should obviously have been called Float or some variant of that, and the type identification function isFloat.
1.0 / 1.0
=> Just 1.0
0.0 / 0.0
=> Nothing