Check whether variable is number or string in JavaScript Check whether variable is number or string in JavaScript javascript javascript

Check whether variable is number or string in JavaScript


If you're dealing with literal notation, and not constructors, you can use typeof:.

typeof "Hello World"; // stringtypeof 123;           // number

If you're creating numbers and strings via a constructor, such as var foo = new String("foo"), you should keep in mind that typeof may return object for foo.

Perhaps a more foolproof method of checking the type would be to utilize the method found in underscore.js (annotated source can be found here),

var toString = Object.prototype.toString;_.isString = function (obj) {  return toString.call(obj) == '[object String]';}

This returns a boolean true for the following:

_.isString("Jonathan"); // true_.isString(new String("Jonathan")); // true


Best way to do that is using isNaN + type casting:

Updated all-in method:

function isNumber(n) { return !isNaN(parseFloat(n)) && !isNaN(n - 0) }

The same using regex:

function isNumber(n) { return /^-?[\d.]+(?:e-?\d+)?$/.test(n); } ------------------------isNumber('123'); // true  isNumber('123abc'); // false  isNumber(5); // true  isNumber('q345'); // falseisNumber(null); // falseisNumber(undefined); // falseisNumber(false); // falseisNumber('   '); // false


The best way I have found is to either check for a method on the string, i.e.:

if (x.substring) {// do string thing} else{// do other thing}

or if you want to do something with the number check for a number property,

if (x.toFixed) {// do number thing} else {// do other thing}

This is sort of like "duck typing", it's up to you which way makes the most sense. I don't have enough karma to comment, but typeof fails for boxed strings and numbers, i.e.:

alert(typeof new String('Hello World'));alert(typeof new Number(5));

will alert "object".