I need a built in function that checks if a variable contains a valid number in Javascript , following this link I\'ve tried to use is isNaN
, however when I use on
Converting an empty string to Number
will evaluate to 0. Same goes for booleans (+false
= 0, +true
= 1), and null
. If that's unwanted, you can create your own function to determine if some (string) value can be converted to Number
. See also (the examples @) MDN.
const canConvert2Number = value =>
!value ||
value === false ||
value === true ||
value === null ||
String(value).trim().length < 1
? false
: !isNaN(+value);
console.log(canConvert2Number(null)); //false
console.log(canConvert2Number("")); //false
console.log(canConvert2Number()); //false
console.log(canConvert2Number(false)); //false
console.log(canConvert2Number(true)); //false
console.log(canConvert2Number("[]")); //false
console.log(canConvert2Number("{}")); //false
console.log(canConvert2Number("20.4")); //true
console.log(canConvert2Number("10E4")); //true
.as-console-wrapper { top: 0; max-height: 100% !important; }
isNaN()
The empty string is converted to 0 which is not NaN
Any thing which cannot be converted to number should return true, But ""
string can be parsed to number so it returns false
console.log(+"")
console.log(Number(""))
console.log(isNaN(""))
A polyfill for isNaN looks like this
var isNaN = function(value) {
var n = Number(value);
return n !== n;
};
console.log(isNaN(""))
Note:- Things get confusing when you try parseInt on these values. But the parseInt specs literally says it returns NaN the first non-whitespace character cannot be converted to a number.
or radix is below 2 or above 36
.
console.log(parseInt(""))