My guess would be:
function isNumber(val) { return val === +val; } Is there a better way?
Previous Reference
Validate decimal numbers in JavaScript - IsNumeric()
86 Answers
var isNumber = function isNumber(value) { return typeof value === 'number' && isFinite(value); } This code above is taken from the book "JavaScript - the good parts".
/* ANSWER UPDATE BEGIN - in reply to some comments
below from the person who asked the question and others */
var isNumber = function isNumber(value) { return typeof value === 'number' && isFinite(value); } var isNumberObject = function isNumberObject(n) { return (Object.prototype.toString.apply(n) === '[object Number]'); } var isCustomNumber = function isCustomNumber(n){ return isNumber(n) || isNumberObject(n); } console.log(isCustomNumber(new Number(5))); console.log(isCustomNumber(new Number(5.2))); console.log(isCustomNumber(new Number(5.5))); console.log(isCustomNumber(new Number(-1))); console.log(isCustomNumber(new Number(-1.5))); console.log(isCustomNumber(new Number(-0.0))); console.log(isCustomNumber(new Number(0.0))); console.log(isCustomNumber(new Number(0))); console.log(isCustomNumber(new Number(1e5))); console.log(isCustomNumber(5)); console.log(isCustomNumber(5.2)); console.log(isCustomNumber(5.5)); console.log(isCustomNumber(-1)); console.log(isCustomNumber(-1.5)); console.log(isCustomNumber(-0.0)); console.log(isCustomNumber(0.0)); console.log(isCustomNumber(0)); console.log(isCustomNumber(1e5));/* ANSWER UPDATE END - in reply to some comments
below from the person who asked the question and others */
If you do not want to include strings, and you do want to include Infinity, you can compare the Number coercion of the argument to the argument:
function isNumber(n){ return Number(n)=== n; } //test
[0, 1, 2, -1, 1.345e+17, Infinity, false, true, NaN, '1', '0'].map(function(itm){ return itm+'= '+isNumber(itm); }); // returned values 0= true 1= true 2= true -1= true 134500000000000000= true Infinity= true false= false true= false NaN= false '1'= false '0'= false 1function isNumber(val){ return typeof val==='number'; } 2If you want "23" to be a number, then
function isNumber(val) { return !isNaN(val); } 2function isNumber(val) { // negative or positive return /^[-]?\d+$/.test(val); } 3I like this solution:
function isNumber(val) { return (val >=0 || val < 0); } 3