During some projects I have needed to validate some data and be as certain as possible that it is javascript numerical value that can be used in mathematical operations.
In my opinion, if it's an array then its not numeric. To alleviate this problem, I added a check to discount arrays from the logic
You can have that problem with any other object as well, for example {toString:function(){return "1.2";}}
. Which objects would you think were numeric? Number
objects? None?
Instead of trying to blacklist some things that fail your test, you should explicitly whitelist the things you want to be numeric. What is your function supposed to get, primitive strings and numbers? Then test exactly for them:
(typeof n == "string" || typeof n == "number")