413 votos

Comprobar si la variable es un número o una cadena en javascript

¿Alguien sabe cómo puedo comprobar si una variable es un número o una cadena en javascript?

399voto

Jonathan Sampson Puntos 121800

Si usted está tratando con literal de la notación, y no constructores, se puede utilizar typeof:.

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

Si vas a crear números y cadenas a través de un constructor, como var foo = new String("foo"), usted debe tener en cuenta que typeof puede devolver object para foo.

Tal vez una más infalible método de comprobar el tipo sería utilizar el método que se encuentra en underscore.js (anotado fuente se puede encontrar aquí),

var toString = Object.prototype.toString;

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

Esto devuelve un valor booleano true para los siguientes:

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

177voto

BitOfUniverse Puntos 2516

La mejor manera de hacer esto es utilizando isNaN + tipo de casting:

Actualizado todos-en el método:

function isNumber(obj) { return !isNaN(parseFloat(obj)) }

El mismo uso de expresiones regulares (regex:

function isNumber(n) { return /^-?[\d.]+(?:e-?\d+)?$/.test(n); } 

------------------------

isNumber ('123'); // true  
isNumber (5); // true  
isNumber ('q345'); // false
isNumber(null); // false
isNumber(undefined); // false
isNumber(false); // false
isNumber('   '); // false

EDICIÓN:

En caso de que usted necesita para manejar null valores:

function isNumber (o) {
  return ! isNaN (o-0) && o != null;
}

EDIT2 (actualizado) : En caso de que usted necesita para manejar null y la cadena vacía:

function isNumber (o) {
  return ! isNaN (o-0) && o !== null && o !== "" && o !== false;
}

isNumber (''); // false

72voto

Alokito Puntos 656

La mejor manera que he encontrado es a la verificación de un método de la cadena, es decir:

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

o si quieres hacer algo con el número de buscar una serie de propiedad,

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

Esto es algo así como "duck typing", hasta que el camino que tiene más sentido. No tengo suficiente karma para comentar, pero typeof falla de caja cadenas y números, es decir:

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

se alerta de "objeto".

27voto

snorbi Puntos 666

Comprobar si el valor es un literal de cadena o Cadena de objeto:

function isString(o) {
    return typeof o == "string" || (typeof o == "object" && o.constructor === String);
}

La prueba de unidad:

function assertTrue(value, message) {
    if (!value) {
        alert("Assertion error: " + message);
    }
}

function assertFalse(value, message)
{
    assertTrue(!value, message);
}

assertTrue(isString("string literal"), "number literal");
assertTrue(isString(new String("String object")), "String object");
assertFalse(isString(1), "number literal");
assertFalse(isString(true), "boolean literal");
assertFalse(isString({}), "object");

La comprobación de un número es similar:

function isNumber(o) {
    return typeof o == "number" || (typeof o == "object" && o.constructor === Number);
}

22voto

Jakob Gade Puntos 6006

Estás buscando isNaN():

<script type="text/javascript">
  alert(isNaN(123));
  alert(isNaN(-1.23));
  alert(isNaN(5-2));
  alert(isNaN(0));
  alert(isNaN("Hello"));
  alert(isNaN("2005/12/12"));
</script>

Ver JavaScript isNaN() Función en el MDN.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X