Probablemente hayas echado de menos alguna vez en JavaScript una función isInt(), es decir, que le pases una variable y te devuelva verdadero si es entero y falso en caso contrario. Esta comprobación es muy típica en el envío de formularios: edades, componentes de una fecha o cualquier otra cantidad que no puede tener decimales.
Acabo de tener esta necesidad y aquí os traigo la función que hace justo esto:
function esEntero(x){ var y = parseInt(x); if (isNaN(y)) return false; return x == y && x.toString() == y.toString(); }
Aquí tenéis la función y aquí os dejo su correspondiente explicación, odio copiar y pegar código de Internet si no sé perfectamente cuál es el por qué de cada sentencia.
Primero se intenta parsear la variable a entero, parseInt(). Esta función es muy poco estricta y es capaz de convertir cadenas “40 años” al entero 40. Si aún así le es imposible, devuelve NaN y con eso devolvemos directamente falos.
Si ha devuelto un número, tenemos que asegurarnos que es entero. ¿Cómo? Con una doble comprobación extra:
La idea es que todas las cadenas que es capaz de tratar parseInt() pero que no son enteras, se desechen con esta doble comprobación.
¿Útil verdad? La programación en el navegador en el lado del cliente con JavaScript es cada vez más útil gracias a las posibilidades que se nos ofrecen en este entorno, así que os traeré más entradas de este tipo porque yo mismo estoy inmerso en grandes proyectos que requieren de mucho y buen JavaScript.
https://www.youtube.com/embed/z-xGk9c_eOw Guionista y locutor: Manuel Ignacio López Quintero.Fecha de publicación: 31 de diciembre de 2024.
Ver comentarios
Estoy algo espeso, pero yo hubiera tirado también del operador typeof
if ( typeof x == "number" ) { alert ("al loro, tenemos un número xD"); }
Aunque asumo que te refieres sobretodo a datos que provienen de inputs por ejemplo, que se considera string hasta que se demuestre lo contrario.
También se podría tirar de una expresión regular del tipo (aquí mi sintaxis chirría aún más), creo que la expresión a usar sería algo así (falta el código js):
^\d*$
A ver si en un par de cafés escribo mejor.
Un saludo.
Esta también es bastante util, es para comprobar que sea numerico:
function isNumber(n) {
return !isNaN(parseFloat(n)) && isFinite(n);
}
@Siot: Buena idea lo del typeof, tendré que probarlo y ver si es más rápido. El problema de las expresiones regulares, es justo ese, la velocidad y en un lenguaje interpretado como JavaScript todavía más.
@javier: Muchas gracias por la aportación, esto de los lenguajes no tipados tiene este problema... con lo fácil que sería forzar los tipos...
muy largo, prefiero verificar si la variable su función constructora es pseudoclase Number.
function esEntero(a){
return a.constructor == Number;
}
Tal vez sea algo viejo, pero en mis tiempos "parseInt" tiene o tenía un issue; debes especificar la "base" de conversion, por default, convierte a octal, es decir,:
parseInt(x, 10)
Felicidades. Muy util la funcion. Javascript adolece un poco en las funciones de comprobacion predefinidas.
Ademas es una funcion muy util para los/las amantes de los falos, ya que como dices: "Si aún así le es imposible, devuelve NaN y con eso devolvemos directamente falos" :))
¿No es más fácil usar num%1==0 para comprobar que es un número entero?
Una cadena vacía devolvería true