Compruebe 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?
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 typeof
puede object
devolver 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 true
para lo siguiente:
_.isString("Jonathan"); // true
_.isString(new String("Jonathan")); // true
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
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".
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