Compruebe si la variable es un número o una cadena en JavaScript

Resuelto Jin Yong asked hace 15 años • 35 respuestas

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

Jin Yong avatar Aug 20 '09 09:08 Jin Yong
Aceptado

Si está tratando con notación literal y no con constructores, puede usar typeof :.

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

Si estás creando números y cadenas a través de un constructor, como var foo = new String("foo"), debes tener en cuenta que typeofpuede objectdevolver foo.

Quizás un método más infalible para verificar el tipo sería utilizar el método que se encuentra en underscore.js (la fuente comentada se puede encontrar aquí ),

var toString = Object.prototype.toString;

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

Esto devuelve un valor booleano truepara lo siguiente:

_.isString("Jonathan"); // true
_.isString(new String("Jonathan")); // true
Sampson avatar Aug 20 '2009 02:08 Sampson

La mejor manera de hacerlo es usando isNaN+ conversión de tipo:

Método todo incluido actualizado:

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

Lo mismo usando expresiones regulares:

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

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

isNumber('123'); // true  
isNumber('123abc'); // false  
isNumber(5); // true  
isNumber('q345'); // false
isNumber(null); // false
isNumber(undefined); // false
isNumber(false); // false
isNumber('   '); // false
BitOfUniverse avatar Sep 14 '2009 14:09 BitOfUniverse

La mejor manera que he encontrado es buscar un método en la cadena, es decir:

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

o si desea hacer algo con la verificación numérica de una propiedad numérica,

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

Esto es algo así como "escribir como un pato", depende de usted qué forma tiene más sentido. No tengo suficiente karma para comentar, pero typeof falla para cadenas y números encajonados, es decir:

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

alertará al "objeto".

Alokito avatar Jan 13 '2011 16:01 Alokito

Desde ES2015, la forma correcta de comprobar si una variable contiene un número válido esNumber.isFinite(value)

Ejemplos:

Number.isFinite(Infinity)   // false
Number.isFinite(NaN)        // false
Number.isFinite(-Infinity)  // false

Number.isFinite(0)          // true
Number.isFinite(2e64)       // true

Number.isFinite('0')        // false
Number.isFinite(null)       // false
adius avatar Apr 10 '2016 17:04 adius